我想了解为什么我不能以一种方式创建可变大小的数组,但是可以以另一种方式来创建..
在这里您可以看到2种不同的代码,第一种有效,但是第二种却没有(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.
但是第一个代码中没有任何内容,一切正常。.我不明白为什么,在我的情况下,我真的需要使用第二种方法。
谢谢!
答案 0 :(得分:1)
一个numpy数组具有固定的“矩形”形状和dtype
。尚不清楚您是否需要重新阅读基本文档。
np.array(...)
尝试从输入中创建多维数组。经典案例是
np.array([ [1,2], [3,4] ])
从列表列表中生成二维数组。
但是,如果输入大小不同,则无法做到这一点。后退是创建一个对象dtype数组,并用指向这些输入的指针填充它。这就是您的第一种情况。查看其dtype
和shape
。
在第二种情况下,您将创建一个包含10个浮点数的数组。当您尝试将多维图像对象放入那些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])]