用Python将整个数组作为一个元素追加到另一个内部有不同大小数组的数组中。

问题描述 投票:0回答:1

比如说我有一个数组'a',是这样的

>>> a = np.array([[1,2], [3,4,5]])

>>> a.shape

(2,)
>>> 

现在我想把一个数组的全部内容,比如[6,7,8,9],作为一个元素而不是四个元素附加到它上面。

>>> b = np.append(a,[6,7,8,9])

>>> b.shape

(6,)
>>> 

但这不是我想要的. 我想要的是通过将新数组中的每个元素堆叠到a中,让b有3个元素,而不是6个。我找到了一个如下的变通方法,但是正确的方法是什么?

>>> b = np.append(a,[0])

>>> b[2] = [6,7,8,9]

>>> b.shape

(3,)
>>> 
python arrays numpy append
1个回答
1
投票

你不应该用不同大小的数组创建numpy数组,因为这不是它的工作方式。

第一行的结果,将是由2个python列表组成的numpy数组。如果你想拥有不同大小的数组,那么你应该使用python list(),不 ndarray.

然后你就可以使用 append 方法。

a = [[1, 2], [3, 4, 5]]
a.append([6, 7, 8, 9])

1
投票

定义2个数组。

In [19]: a = np.array([[1,2], [3,4,5]])                                         
In [20]: b = np.array([6,7,8,9])                                                
In [21]: a                                                                      
Out[21]: array([list([1, 2]), list([3, 4, 5])], dtype=object)

Since a 是一个列表数组,让我们回溯一下,定义一下 b 作为一个列表。

In [22]: b = [6,7,8,9]                                                          

对象数组与列表相比,几乎没有任何优势。 最大的缺点是它没有一个 append 方法。

In [23]: a.tolist()                                                             
Out[23]: [[1, 2], [3, 4, 5]]
In [24]: alist = a.tolist()                                                     
In [25]: alist.append(b)                                                        
In [26]: np.array(alist)                                                        
Out[26]: array([list([1, 2]), list([3, 4, 5]), list([6, 7, 8, 9])], dtype=object)

虽然我们可以想出一个有3个元素的新数组的方法 但我怀疑它是否会比这个list append更好。

当我们尝试 concatenateజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజజ b 列表首先被变成一个数组。

In [30]: np.concatenate([a,b])                                                  
Out[30]: array([list([1, 2]), list([3, 4, 5]), 6, 7, 8, 9], dtype=object)
In [31]: np.array(b)                                                            
Out[31]: array([6, 7, 8, 9])

所以这个数组把(2,) a 与(4,) b 产生一个(6,)。

为了实现你想要的连词,我们必须首先将 b 在一个类似的对象dtype数组中。

In [32]: c = np.array([None])                                                   
In [33]: c                                                                      
Out[33]: array([None], dtype=object)
In [34]: c[0]=b                                                                 
In [35]: c                                                                      
Out[35]: array([list([6, 7, 8, 9])], dtype=object)

c 是一个(1,)对象dtype,它与(2,) a 根据需要。

In [36]: np.concatenate((a,c))                                                  
Out[36]: array([list([1, 2]), list([3, 4, 5]), list([6, 7, 8, 9])], dtype=object)

这实际上和你的追加[0]是一样的。

In [40]: d = np.concatenate([a, [None]])                                        
In [41]: d                                                                      
Out[41]: array([list([1, 2]), list([3, 4, 5]), None], dtype=object)
In [42]: d[-1] = b                                                              
In [43]: d                                                                      
Out[43]: array([list([1, 2]), list([3, 4, 5]), list([6, 7, 8, 9])], dtype=object)

你必须以某种方式或其他方式转换 b 变成一个单元素数组,而不是4个元素的 Out[31]. concatenate 加入数组。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.