假设我们有一个如下所示的数组:
a = np.array(np.arange(15)).reshape(3,-1)
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
和一个包含位置的列表,我们希望将这些之前的所有内容设置为np.NaN
l = [0,2,1]
最终结果将是:
array([[ 1., 2., 3., 4., 5.],
[nan, nan, 7., 8., 9.],
[nan, 11., 12., 13., 14.]])
有没有办法在 numpy 中做到这一点?我能想到的唯一无需迭代的解决方案是创建一个带有索引位置的虚拟数组,但想知道是否有更好的方法我错过了。谢谢。
目前的解决方案:
s = a.shape
a = a.astype(float)
a[np.where((np.array([[*np.arange(s[-1])]]*s[0]) < np.array(l)[:,None]))] = np.NaN
使用广播:
输出 :
中间体:
另一种方法(由 @mozway 建议)可以避免强制转换并将
nan
where
其置于以下位置: