Python 如何将二维numpy数组列表连接到三维numpy数组中?

Python 如何将二维numpy数组列表连接到三维numpy数组中?,python,numpy,Python,Numpy,我做了很多尝试,但concatenate或vstack都不适合我。您可以使用np.dstack,文档可以在这里找到: 你试过np.array吗 通过连接2个一维数组列表生成二维数组 同样地 np.array([np.ones(3,3), np.zeros(3,3)]] 应该生成一个2,3,3数组 一个新的np.stack函数可以让您更好地控制添加的轴。它的工作原理是将所有输入数组的维度扩展一,然后连接 您可以自己展开尺寸,例如: In [378]: A=np.ones((2,3),int) I

我做了很多尝试,但concatenate或vstack都不适合我。

您可以使用np.dstack,文档可以在这里找到:

你试过np.array吗

通过连接2个一维数组列表生成二维数组

同样地

np.array([np.ones(3,3), np.zeros(3,3)]]
应该生成一个2,3,3数组

一个新的np.stack函数可以让您更好地控制添加的轴。它的工作原理是将所有输入数组的维度扩展一,然后连接

您可以自己展开尺寸,例如:

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)
需要了解的关键是:

匹配输入的维度-它们必须在所有维度上匹配,但要连接的维度除外

根据需要扩大投入的规模。要连接二维阵列以形成三维阵列,必须先将二维阵列扩展到三维阵列。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将创建一个对象数据类型数组

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.array,但它返回了一个形状为n的numpy数组,而其中的每个元素都是另一个numpy数组。那么n个数组的形状必须不同。它正在创建一个对象数组。你的阵列是什么形状的?我不知道dstack是如何工作的。我当时没意识到这一点!我终于发现我的一些numpy数组大小不一样。非常感谢你的回答!
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,)
In [392]: np.dstack((A,B,C))
....
ValueError: all the input array dimensions except for the concatenation axis must match exactly