Python:在某些索引处附加到numpy数组并更改形状

时间:2018-10-23 03:07:08

标签: python numpy

我有一个像这样的numpy数组:

print(pred_galactic_prob.shape)
print(pred_galactic_prob[0:3])

(465, 5)
[[0.05 0.94 0.3  0.01 0.5 ]
 [0.01 0.02 0.01 0.85 0.11]
 [0.03 0.95 0.3  0.3  0.02]]

我想附加到此并更改形状,所以有13列,看起来像这样:

[[0.05 0.   0.94 0.   0.   0.3  0.   0.   0.01 0.   0.   0.   0.5 ]
 [0.01 0.   0.02 0.   0.   0.01 0.   0.   0.85 0.   0.   0.   0.11]
 [0.03 0.   0.95 0.   0.   0.3  0.   0.   0.3  0.   0.   0.   0.02]]

即在第一列之后添加全为0的列,在第二个条目之后添加全为0的两列,依此类推。

我尝试了以下方法:

pred_galactic_prob2 = np.array
for i in pred_galactic_prob:
    pred_galactic_prob2 = np.append(pred_galactic_prob2, [i[0], 0.0, i[1], 0.0, 0.0, i[2], 0.0, 0.0, i[3], 0.0, 0.0, 0.0, i[4]])

但这只是将其变成一维数组。

1 个答案:

答案 0 :(得分:0)

一个“单行”解决方案就是

np.concatenate((a[:,:1],
                np.lib.stride_tricks.as_strided(0,[len(a),1],[0,0]),
                a[:,1:2],
                np.lib.stride_tricks.as_strided(0,[len(a),2],[0,0]),
                a[:,2:3],
                np.lib.stride_tricks.as_strided(0,[len(a),2],[0,0]),
                a[:,3:4],
                np.lib.stride_tricks.as_strided(0,[len(a),3],[0,0]),
                a[:,4:]), -1)

尽管在任何意义上都是有线的。使用append将需要更多as_strided。我认为应该有一个append-ish函数,该函数会自动广播输入,但是我不确定这是什么。无论如何,肯定有更好的解决方案,如@hpaulj所述:

b = np.zeros((len(a), 13), a.dtype)
b[:,[0,2,5,8,12]] = a

此处a表示输入,b表示输出