Python 2.7将列附加到2d数组

时间:2017-05-10 00:17:44

标签: python arrays numpy

我有2个数组,x和y:

x = [[ 1.  2.  3.  4.]
     [ 5.  6.  7.  8.]
     [ 9.  0.  3.  6.]]

y = [[ 1.  0.  0.]
     [ 0.  1.  0.]
     [ 0.  0.  1.]]

我想要一个z矩阵,如:z = [y [0],x,y [1],y [2]]:

[[ 1.  1.  2.  3.  4.  0.  0.]
 [ 0.  5.  6.  7.  8.  1.  0.]
 [ 0.  9.  0.  3.  6.  0.  1.]]

所以我制作了这段代码:

z = np.c_[y[0], x]
for j in range(n):
   z = np.c_[x, y[j]]

但它没有保存矩阵。我得到的z只是最后一次操作:

[[ 1.  2.  3.  4.  0.]
 [ 5.  6.  7.  8.  0.]
 [ 9.  0.  3.  6.  1.]]

如何保存对矩阵所做的更改?我也尝试以相同的方式numpy.append(),但它给出了一条错误消息:

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

2 个答案:

答案 0 :(得分:1)

使用np.c来堆叠y和x的列。

np.c_[np.array(y)[0],np.asanyarray(x),np.array(y)[1],np.array(y)[2]]
Out[536]: 
array([[1, 1, 2, ..., 4, 0, 0],
       [0, 5, 6, ..., 8, 1, 0],
       [0, 9, 0, ..., 6, 0, 1]])

或者您可以使用np.roll在堆叠之前移动列,然后再移动。

np.roll(np.c_[np.array(x),np.roll(np.array(y),-1,axis=1)],1,axis=1)
Out[549]: 
array([[1, 1, 2, ..., 4, 0, 0],
       [0, 5, 6, ..., 8, 1, 0],
       [0, 9, 0, ..., 6, 0, 1]])

答案 1 :(得分:1)

我认为您要查找的命令是numpy.insert(a, pos, col, axis = 1)。如果你创建z = insert(y, 1, x, axis = 1),它将在y上插入一个新列,其中包含x的值,并将输出保存在z中。