Numpy连接具有相同行但不同列的数组

时间:2017-05-09 12:28:54

标签: python arrays numpy concatenation

我有一个包含相同行但列不同的数组列表。 我打印出阵列的形状并检查它们是否有相同的行。

print ("Type x_test : actual",type(x_dump),x_dump.shape, type(actual), actual.shape, pred.shape)
cmp = np.concatenate([x_test,actual,pred],axis = 1)

('Type x_test : actual', <type 'numpy.ndarray'>, (2420L, 4719L), <type 'numpy.ndarray'>, (2420L,), (2420L,))

这给了我一个错误:

ValueError: all the input arrays must have same number of dimensions

我尝试使用以下命令复制此错误:

x.shape,x1.shape,x2.shape
Out[772]: ((3L, 1L), (3L, 4L), (3L, 1L))

np.concatenate([x,x1,x2],axis=1)
Out[764]: 
array([[ 0,  0,  1,  2,  3,  0],
       [ 1,  4,  5,  6,  7,  1],
       [ 2,  8,  9, 10, 11,  2]])

我这里没有任何错误。有人面临类似问题吗?

编辑1:写完这个问题后,我发现尺寸不同。 @Gareth Rees:已经很好地解释了numpy数组(R,1)和(R,)here之间的差异。

修正使用:

# Reshape and concatenate
actual = actual.reshape(len(actual),1)
pred = pred.reshape(len(pred),1)

编辑2:将此答案标记为Difference between numpy.array shape (R, 1) and (R,)的副本。

1 个答案:

答案 0 :(得分:-1)

修改

发布后,OP发现了错误。这可以忽略,除非需要看到具有形状(R,1)与(R,)的构造。无论如何,它将为选民提供实践空间。

ORIGINAL

鉴于你的形状,答案是正确的。

a = np.arange(3).reshape(3,1)

b = np.arange(12).reshape(3,4)

c = np.arange(3).reshape(3,1)

np.concatenate([a, b, c], axis=1)
Out[4]: 
array([[ 0,  0,  1,  2,  3,  0],
       [ 1,  4,  5,  6,  7,  1],
       [ 2,  8,  9, 10, 11,  2]])

a
Out[5]: 
array([[0],
       [1],
       [2]])

b
Out[6]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

c
Out[7]: 
array([[0],
       [1],
       [2]])