[英]How can I concatenate a list of 2d numpy arrays into a 3d numpy array?
我尝试了很多,但是没有任何concatenate
或vstack
可以为我工作。
您是否尝试过np.array
?
np.array([[1,2],[3,4]])
通过串联2个1d数组(列表)组成2d数组
相似地
np.array([np.ones(3,3), np.zeros(3,3)]]
应该产生一个(2,3,3)数组。
np.stack
函数使您可以更好地控制要添加的轴。 它通过将所有输入数组的维数加1并进行连接来工作。
您可以自己扩展尺寸,例如
In [378]: A=np.ones((2,3),int)
In [379]: B=np.zeros((2,3),int)
In [380]: np.concatenate([A[None,:,:], B[None,:,:]], axis=0)
Out[380]:
array([[[1, 1, 1],
[1, 1, 1]],
[[0, 0, 0],
[0, 0, 0]]])
In [381]: _.shape
Out[381]: (2, 2, 3)
要理解的关键是:
匹配输入的尺寸-除了要连接的尺寸外,它们必须匹配所有尺寸
根据需要扩展输入的维度。 要连接2d数组以形成3d,必须先将2d扩展为3d。 None
或np.newaxis
技巧特别有价值。
沿右轴连接。
stack
, hstack
, vstack
等都有助于实现这一点,但是熟练的numpy用户应该能够直接使用concatenate
。 在互动环节中练习小样本。
In [385]: np.array((A,B)).shape
Out[385]: (2, 2, 3)
In [386]: np.stack((A,B)).shape
Out[386]: (2, 2, 3)
In [387]: np.stack((A,B),axis=1).shape
Out[387]: (2, 2, 3)
In [388]: np.stack((A,B),axis=2).shape
Out[388]: (2, 3, 2)
如果数组的形状不同,则np.array
将创建一个对象np.array
数组
In [389]: C=np.ones((3,3))
In [390]: np.array((A,C))
Out[390]:
array([array([[1, 1, 1],
[1, 1, 1]]),
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])], dtype=object)
In [391]: _.shape
Out[391]: (2,)
dstack
(和stack
)在使用不同大小的数组时会遇到问题:
In [392]: np.dstack((A,B,C))
....
ValueError: all the input array dimensions except for the concatenation axis must match exactly
您可以使用np.dstack,文档可以在这里找到: https ://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.dstack.html
import numpy as np
l1 = []
# create list of arrays
for i in range(5):
l1.append(np.random.random((5, 3)))
# convert list of arrays into 3-dimensional array
d = np.dstack(l1)
d.shape #(5,3,5)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.