连接两个numpy数组问题

时间:2016-07-07 17:50:05

标签: python numpy

我有两个numpy形状的数组

(129873, 12)
(129873,)

我想连接这些,所以它们的形状为:

(129873, 13)

我尝试了numpy.concatenatenumpy.vstack,但似乎遇到了错误:

  

ValueError:所有输入数组必须具有相同的维数

有关如何执行此操作的任何建议?

2 个答案:

答案 0 :(得分:2)

我认为这已经在这里得到了解答:

Numpy: Concatenating multidimensional and unidimensional arrays

import numpy
a = numpy.array([[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]])
b = numpy.array([5, 6, 6])
c = numpy.column_stack((a,b))
print a
print b
print c
print a.shape
print b.shape
print c.shape

这会给你:

[[1 2 3 4 5]
 [1 2 3 4 5]
 [1 2 3 4 5]]
[5 6 6]
[[1 2 3 4 5 5]
 [1 2 3 4 5 6]
 [1 2 3 4 5 6]]
(3, 5)
(3,)
(3, 6)

答案 1 :(得分:1)

所以一个数组有2个维度,另一个数组有1个:

(129873, 12)
(129873,)

您需要将第2个更改为具有(129873,1)形状。然后你可以在轴1上连接。

有很多方法可以做到这一点。我最喜欢[:,None]np.newaxis索引:

In [648]: A=np.ones((3,4),int)

In [649]: B=np.ones((3,),int)

In [650]: B[:,None].shape
Out[650]: (3, 1)

In [651]: np.concatenate((A,B[:,None]),axis=1).shape
Out[651]: (3, 5)

B.reshape(-1,1)也有效。还有np.atleast_2d(B).Tnp.expand_dims(B,1)

np.column_stack((A,B))使用np.array(arr, copy=False, subok=True, ndmin=2).T来确保每个数组都有正确数量的维度。

虽然concatenatecolumn_stack的友好封面,但了解如何直接更改尺寸非常重要。