2016-12-03 277 views

回答

4

你试过np.array

np.array([[1,2],[3,4]]) 

使得2D阵列通过连接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) 

关键的东西理解是:

  • 匹配的输入尺寸 - 他们必须匹配所有但被加入

  • 扩大投入的尺寸尺寸如所须。要连接2D阵列以形成3D,2D必须首先展开为3D。那Nonenp.newaxis诀窍特别有价值。

  • 沿右轴连接。

stackhstackvstack等都推动这项工作,而是一种技能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创建一个对象D型细胞阵列

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 
+0

我已经尝试了'np.array()',但是它返回了一个形状为'(n,)'的numpy数组,而其中的每个元素都是另一个numpy数组。 – xxx222

+0

然后你的'n'阵列的形状必须不同。它正在创建一个对象数组。你阵列的形状是什么?我不明白'dstack'会如何工作。 – hpaulj

+0

我当时并没有意识到它!我终于发现我的一些numpy数组的大小不一样。非常感谢您的回答! – xxx222