将一些np数组作为新列添加到我的数据

时间:2019-03-25 22:18:09

标签: python numpy

我想添加(N x 1)个np.array作为新列到另一个np.array(N x M)

我尝试了很多事情(追加,转置,hstack等),但是由于某种原因,我无法使其正常工作。

例如:

a=[[1,2,3],[4,5,6], [7,8,9], [10,11,12]]
b=[100,200,300,400]
c=[100,200,300,400]
d=[100,200,300,400]

我希望结果是这样的:

1,2,3,100,100,100
4,5,6,200,200,200
7,8,9,300,300,300
10,11,12,400,400,400

2 个答案:

答案 0 :(得分:3)

您可以使用function readguarded(ws) data = Vector{UInt8}() success = true try data = read(ws) catch err @debug err data = Vector{UInt8}() success = false finally return data, success end end 按列组合数据:

np.c_
a = [[1,2,3],[4,5,6], [7,8,9], [10,11,12]]
b = [100,200,300,400]
c = [100,200,300,400]
d = [100,200,300,400]

np.c_[a, b, c, d]

您也可以使用``column_stack''获得相同的结果:

array([[  1,   2,   3, 100, 100, 100],
       [  4,   5,   6, 200, 200, 200],
       [  7,   8,   9, 300, 300, 300],
       [ 10,  11,  12, 400, 400, 400]])
np.column_stack([a, b, c, d])

感谢josemz提供了更简洁的版本。

答案 1 :(得分:0)

只需将它们串联在最后一个轴上即可

In [329]: a=np.array([[1,2,3],[4,5,6], [7,8,9], [10,11,12]]) 
     ...: b=np.array([[100,200,300,400]]).T         # transpose a (1,4)
     ...: c=np.array([100,200,300,400])[:,None]     # add a dimension
     ...: d=np.array([[100],[200],[300],[400]])     # list of lists 

In [330]: np.concatenate([a,b,c,d], axis=-1)                                    
Out[330]: 
array([[  1,   2,   3, 100, 100, 100],
       [  4,   5,   6, 200, 200, 200],
       [  7,   8,   9, 300, 300, 300],
       [ 10,  11,  12, 400, 400, 400]])

检查形状:

In [331]: [i.shape for i in [a,b,c,d]]                                          
Out[331]: [(4, 3), (4, 1), (4, 1), (4, 1)]

但是您显示的b np.array([100,200,300,400])是(4,)形的,而不是(4,1)。因此,它需要进行数组重塑,例如column_stack提供的数组。