Python 如何重复连接numpy数组?

Python 如何重复连接numpy数组?,python,numpy,Python,Numpy,我正在尝试查看是否可以将具有固定大小的空数组与具有相同大小的其他数组连接起来: import numpy as np final_array = np.empty([3, 5]) >>>final_array array([[ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]]) array_1 = np.array([1, 1, 1]) final_array = np.concatenate([f

我正在尝试查看是否可以将具有固定大小的空数组与具有相同大小的其他数组连接起来:

import numpy as np

final_array = np.empty([3, 5])
>>>final_array
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

array_1 = np.array([1, 1, 1])
final_array = np.concatenate([final_array, array_1])
>>>final_array
array([[ 1,  1,  1],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

array_2 = np.array([2, 2, 2])
final_array = np.concatenate([final_array, array_2])
>>>final_array
array([[ 1,  1,  1],
       [ 2,  2,  2],
       [ 0.,  0.,  0.]])

array_3 = np.array([3, 3, 3])
final_array = np.concatenate([final_array, array_3])
>>>final_array
array([[ 1,  1,  1],
       [ 2,  2,  2],
       [ 3,  3,  3]])
因此,我想以顺序方式将
最终数组
数组_1
数组_2
数组_3
连接起来。我将如何实现这一点


多谢各位

np.vstack
可以满足您的目的:

array_1 = np.array([1, 1, 1])
array_2 = np.array([2, 2, 2])
array_3 = np.array([3, 3, 3])

lst = [array_1, array_2, array_3]

np.vstack(lst)

# array([[1, 1, 1],
#        [2, 2, 2],
#        [3, 3, 3]])
另一种选择是
itertools.chain

from itertools import chain

np.fromiter(chain(*lst), dtype=np.int8).reshape((len(lst), len(lst[0])))

# array([[1, 1, 1],
#        [2, 2, 2],
#        [3, 3, 3]], dtype=int8)
这是一个具有随机“未填充”值的(3,5)形数组

In [3]: np.concatenate([final_array, np.array([1,1,1])])    
ValueError: all the input arrays must have same number of dimensions
这不起作用,因为
final_array
是2d,而另一个是1d

In [4]: np.concatenate([final_array, np.array([[1,1,1]])])

ValueError: all the input array dimensions except for the concatenation axis must match exactly
现在第二个是(1,3),它在第二维度上与(3,5)不匹配

这样可以在原来的(3,5)行中添加一个新行。但是原始的随机值仍然存在

最好构建一个数组列表,并进行一次连接

In [7]: alist = []      # not at all like `np.empty`
In [8]: for i in range(3):
   ...:     alist.append(np.ones((3,),int)*(i+1))
   ...:     
In [9]: alist
Out[9]: [array([1, 1, 1]), array([2, 2, 2]), array([3, 3, 3])]

In [10]: np.array(alist)
Out[10]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])

In [11]: np.stack(alist)   # equivalent
Out[11]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])

In [12]: np.vstack(alist)
Out[12]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])
但是,
连接
在1个现有维度上连接它们:

In [13]: np.concatenate(alist)
Out[13]: array([1, 1, 1, 2, 2, 2, 3, 3, 3])

您能澄清一下所需的输出是什么吗?@myrtlecat final_数组在最后一行<代码>np.empty([3,5])不会生成您显示的内容。它也不等同于空列表
[]
。概念完全不同。最好在列表中收集arrray,并在最后进行一次连接。非常感谢您的回复。事实上,出于我的目的,我必须使用空的
final_数组
对它们进行堆栈,如本文所述。
In [7]: alist = []      # not at all like `np.empty`
In [8]: for i in range(3):
   ...:     alist.append(np.ones((3,),int)*(i+1))
   ...:     
In [9]: alist
Out[9]: [array([1, 1, 1]), array([2, 2, 2]), array([3, 3, 3])]

In [10]: np.array(alist)
Out[10]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])

In [11]: np.stack(alist)   # equivalent
Out[11]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])

In [12]: np.vstack(alist)
Out[12]: 
array([[1, 1, 1],
       [2, 2, 2],
       [3, 3, 3]])
In [13]: np.concatenate(alist)
Out[13]: array([1, 1, 1, 2, 2, 2, 3, 3, 3])