import numpy as np
for h in range(10):
try:
array = np.array([np.zeros((h, 4)), np.zeros((3, h))], dtype=object)
except ValueError:
print(f'Value Error for h={h} only.')
在上面的代码中,
ValueError
仅发生在h=3
。这看起来很随意。
完整的错误是,
File "path/to/arr.py", line 4, in <module>
array = np.array([np.zeros((h, 4)), np.zeros((3, h))], dtype=object)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: could not broadcast input array from shape (3,4) into shape (3,)
如何避免这种情况以及为什么会发生这种情况?
numpy
中创建数组的数组时,如果可能,它会尝试将它们组合成常规的多维数组。h=3
,两个数组碰巧具有相同的行数。
numpy
认为你可能想要堆叠这些数组,但它们的列大小4和3不匹配,导致ValueError
。numpy
不会组合数组。import numpy as np
for h in range(10):
array = np.empty(2, dtype=object)
array[0] = np.zeros((h, 4))
array[1] = np.zeros((3, h))