Skip to main content
 首页 » 编程设计

python之大小可变的数组

2024年11月01日2jirigala

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

在这里您可以看到两个不同的代码,第一个有效,但第二个无效(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 数组,并用指向这些输入的指针填充它。这就是你的第一个案例中发生的事情。查看它的 dtypeshape

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