有时在创建新的2d数组时,我最终会使用嵌套的数组,而不是正确的多维数组。这导致了许多复杂情况,例如误导array.shape
值。
我的意思是我最终得到
array([array([...]), array([...])], dtype=object)
当我想要时
array([[...], [...]])
我不确定代码中的哪一点会导致前一种情况。我在想1。避免获得这样的阵列的良好实践是什么以及2。任何将其恢复为多维形式的实用修复。
关于后者,执行
np.array([list(i) for i in nested_array])
有效,但似乎不实用,尤其是在维度较高的情况下。
如果您有一个数组数组,例如:
import numpy as np
arr1 = np.empty(3,object)
arr1[:] = [np.arange(3), np.arange(3, 6), np.arange(6, 9)]
repr(arr1)
结果:
array([array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])], dtype=object)
注意那里的dtype
。这可能会给你带来一些麻烦,比较一下:
arr2 = np.array([np.arange(3), np.arange(3, 6), np.arange(6, 9)])
print(arr2)
print(arr2.dtype)
结果:
[[0 1 2]
[3 4 5]
[6 7 8]]
int32
把arr1
变成一个像arr2
一样的数组,这就是您所要问的:
arr3 = np.stack(arr1)
print(arr3)
print((arr2 == arr3).all())
结果:
[[0 1 2]
[3 4 5]
[6 7 8]]
True
因此,请确保您的数组具有所需的数据类型,如果无法避免以数组数组结束,请将它们与numpy.stack()
组合。