我试图看看是否可以将具有固定大小的空数组连接到具有相同大小的其他数组:
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]])
所以我希望以顺序方式将final_array
与array_1
,array_2
和array_3
连接起来。我怎么做到这一点?
非常感谢!
答案 0 :(得分:2)
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)
答案 1 :(得分:0)
In [1]: final_array = np.empty([3, 5])
In [2]: final_array
Out[2]:
array([[-1.52691690e-041, 6.36598743e-314, 2.01589600e-312,
2.41907520e-312, 1.90979622e-313],
[ 6.79038654e-313, 6.79038653e-313, 3.18299369e-313,
2.14321575e-312, 2.37663529e-312],
[ 4.45619117e-313, 1.93101617e-312, 8.70018274e-313,
-1.52680304e-041, 8.70018275e-313]])
这是一个(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)不匹配。
In [5]: np.concatenate([final_array, np.array([[1,1,1,1,1]])])
Out[5]:
array([[-1.52691690e-041, 6.36598743e-314, 2.01589600e-312,
2.41907520e-312, 1.90979622e-313],
[ 6.79038654e-313, 6.79038653e-313, 3.18299369e-313,
2.14321575e-312, 2.37663529e-312],
[ 4.45619117e-313, 1.93101617e-312, 8.70018274e-313,
-1.52680304e-041, 8.70018275e-313],
[ 1.00000000e+000, 1.00000000e+000, 1.00000000e+000,
1.00000000e+000, 1.00000000e+000]])
In [6]: _.shape
Out[6]: (4, 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]])
但concatenate
将他们加入现有的1个维度:
In [13]: np.concatenate(alist)
Out[13]: array([1, 1, 1, 2, 2, 2, 3, 3, 3])