我想了解为什么我不能通过一种方式创建可变大小的数组,但我可以通过另一种方式..
在这里您可以看到两个不同的代码,第一个有效,但第二个无效(img0、img1 ... 是不同大小的图像)。
第一个:
img = np.array([img0, img1, img2, img3, img4, img5, img6, img7, img8, img9])
第二个:
tableau = np.ones((10,))
for i in range (0, 10):
tableau[i] = img[i]
在第二种情况下,我收到此错误消息:
ValueError: setting an array element with a sequence.
但第一个代码中没有任何内容,一切正常。我不明白为什么,在我的情况下,我真的需要使用第二种方法。
谢谢!
请您参考如下方法:
numpy 数组具有固定的“矩形”形状和 dtype
。不清楚您需要重新阅读基本文档。
np.array(...)
尝试从输入创建一个多维数组。经典案例是
np.array([ [1,2], [3,4] ])
从列表的列表中创建一个二维数组。
但如果输入的大小不同,它就无法做到这一点。回退是创建一个对象 dtype 数组,并用指向这些输入的指针填充它。这就是你的第一个案例中发生的事情。查看它的 dtype
和 shape
。
在第二种情况下,您创建了一个包含 10 个 float 的数组。当您尝试将多维图像对象放入其中一个 float
槽中时,您会收到错误消息。
In [173]: np.array([ [1,2],[3,4] ])
Out[173]:
array([[1, 2],
[3, 4]])
In [174]: np.array([ [1,2],[3,4,5] ])
Out[174]: array([list([1, 2]), list([3, 4, 5])], dtype=object)
您可以从一个object
dtype 数组开始,然后用各种对象填充它:
In [175]: x = np.empty(3, object)
In [176]: x
Out[176]: array([None, None, None], dtype=object)
In [177]: x[0] = [1,2,3]
In [178]: x[1] = {1:2, 3:4}
In [180]: x[2] = np.arange(3)
In [181]: x
Out[181]: array([list([1, 2, 3]), {1: 2, 3: 4}, array([0, 1, 2])], dtype=object)
但请注意,这样的数组比常规的 n-d 数组更像是一个列表。
In [182]: x.tolist()
Out[182]: [[1, 2, 3], {1: 2, 3: 4}, array([0, 1, 2])]