可变大小的数组

时间:2019-08-07 15:35:14

标签: python arrays numpy

我想了解为什么我不能以一种方式创建可变大小的数组,但是可以以另一种方式来创建..

在这里您可以看到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.

但是第一个代码中没有任何内容,一切正常。.我不明白为什么,在我的情况下,我真的需要使用第二种方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

一个numpy数组具有固定的“矩形”形状和dtype。尚不清楚您是否需要重新阅读基本文档。

np.array(...)尝试从输入中创建多维数组。经典案例是

np.array([ [1,2], [3,4] ])

从列表列表中生成二维数组。

但是,如果输入大小不同,则无法做到这一点。后退是创建一个对象dtype数组,并用指向这些输入的指针填充它。这就是您的第一种情况。查看其dtypeshape

在第二种情况下,您将创建一个包含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])]