合并两个Numpy数组

时间:2017-09-15 00:02:34

标签: python numpy

我有一个非常简单的问题! 如何通过增加维度来合并两个numpy数组:

假设我有以下数组:

a=[1,2]
b=[3,4,5]

我需要这个结果:

c=[[1,2],[3,4,5]

然而

np.concatenate((a,b),axis=0)

不起作用!

谢谢!

2 个答案:

答案 0 :(得分:1)

您只需执行以下操作即可获得所需的结果。

c = [a,b]

或者

c = np.array([a,b])

<强>结果:

[[1, 2], [3, 4, 5]]

答案 1 :(得分:1)

将它们放在一个列表中:

In [269]: c = [a,b]
In [270]: c
Out[270]: [[1, 2], [3, 4, 5]]

从中制作阵列并不能很好地运作:

In [271]: np.array(c)
Out[271]: array([list([1, 2]), list([3, 4, 5])], dtype=object)

但如果您的目标只是将列表写入文件csv样式,我们可以这样做:

In [272]: for row in c:
     ...:     line=''
     ...:     for x in row:
     ...:         line += '%5s'%x
     ...:     print(line)
     ...:     
    1    2
    3    4    5

对于文件,只需替换print的文件写入。

numpy有一个很好的savetxt,但它需要一个漂亮的2d数组。那个参差不齐的1d对象dtype数组不起作用。

itertools.zip_longest也可用于填充&#39; c的元素。但是简单地写入文件是最简单的。

使用zip_longest填充行,然后使用savetxt编写csv。请注意&#39;空白&#39;分隔的&#39; cell&#39;:

In [321]: rows =list(zip(*zip_longest(*c,fillvalue='')))
In [322]: rows
Out[322]: [(1, 2, ''), (3, 4, 5)]
In [323]: np.savetxt('foo.txt',rows, fmt='%5s',delimiter=',')
In [324]: cat foo.txt
    1,    2,     
    3,    4,    5

使用正确的填充,我可以重新加载csv(可能需要填充填充值):

In [328]: np.genfromtxt('foo.txt',delimiter=',')
Out[328]: 
array([[  1.,   2.,  nan],
       [  3.,   4.,   5.]])