我有一个像这样的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]])
但这只是将其变成一维数组。
答案 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
表示输出