防止并更正numpy数组嵌套而非多维数组

  • 本文关键字:数组 嵌套 numpy python arrays numpy
  • 更新时间 :
  • 英文 :


有时在创建新的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()组合。

最新更新