使用Python将整个数组作为一个元素附加到另一个数组中,该数组具有不同大小的数组

使用Python将整个数组作为一个元素附加到另一个数组中,该数组具有不同大小的数组,python,arrays,numpy,append,Python,Arrays,Numpy,Append,假设我有这样的数组'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'

>>> 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,)
>>> 

您不应该使用不同大小的数组创建numpy数组,因为它不是这样工作的

第一行的结果是2个python列表的numpy数组。 如果希望有不同大小的数组,那么应该使用python
list()
,而不是
ndarray

然后您将能够使用
append
方法

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

您不应该使用不同大小的数组创建numpy数组,因为它不是这样工作的

第一行的结果是2个python列表的numpy数组。 如果希望有不同大小的数组,那么应该使用python
list()
,而不是
ndarray

然后您将能够使用
append
方法

a = [[1, 2], [3, 4, 5]]
a.append([6, 7, 8, 9])
定义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)
由于
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个元素制作新数组的方法,但我怀疑它是否会比这个列表更好

当我们尝试连接时,
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
连接起来,生成a(6,)

要进行所需的连接,我们必须首先将
b
包装在类似的对象数据类型数组中:

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,)对象数据类型,它根据需要与(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]
<代码>连接连接数组。

定义两个数组:

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)
由于
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个元素制作新数组的方法,但我怀疑它是否会比这个列表更好

当我们尝试连接时,
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
连接起来,生成a(6,)

要进行所需的连接,我们必须首先将
b
包装在类似的对象数据类型数组中:

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,)对象数据类型,它根据需要与(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]
<代码>连接连接数组。

最好避免
np.append
。它不是列表附加克隆,因此不要期望出现相同的行为。它是
np.concatenate
的封面,但首先它会调整输入(如果不指定
axis
)。您的
a
是一个对象数据类型数组。与使用普通数字数组相比,预期在行为上会有所不同。从某种意义上说,没有合适的方法将元素(尤其是数组或列表)添加到对象数组中
a
is本身是不正确的。是的,hpaulj,我首先尝试了np.concatenate,得到了相同的结果。为什么要使用数组?您刚刚创建了一个列表数组。就批量操作而言,列表的效率不是很高,数组也不适合追加。这是两个世界中最糟糕的。你的意思是用数组列表代替吗?最好避免
np.append
。它不是列表附加克隆,因此不要期望出现相同的行为。它是
np.concatenate
的封面,但首先它会调整输入(如果不指定
axis
)。您的
a
是一个对象数据类型数组。与使用普通数字数组相比,预期在行为上会有所不同。从某种意义上说,没有合适的方法将元素(尤其是数组或列表)添加到对象数组中
a
is本身是不正确的。是的,hpaulj,我首先尝试了np.concatenate,得到了相同的结果。为什么要使用数组?您刚刚创建了一个列表数组。就批量操作而言,列表的效率不是很高,数组也不适合追加。这是两个世界中最糟糕的。你的意思是要有一个数组列表吗?