Numpy - 更改每一行中的第一个非 nan 值 og ma

Numpy - Change first non-nan value in every row og ma

我有以下 numpy 数组:

a = np.full((8,8), np.nan)
a[:,2] = 0
a[::2,1] = 0

[[nan  0.  0. nan nan nan nan nan]
 [nan nan  0. nan nan nan nan nan]
 [nan  0.  0. nan nan nan nan nan]
 [nan nan  0. nan nan nan nan nan]
 [nan  0.  0. nan nan nan nan nan]
 [nan nan  0. nan nan nan nan nan]
 [nan  0.  0. nan nan nan nan nan]
 [nan nan  0. nan nan nan nan nan]]

现在我想用 -1 替换每行 中的第一个非 nan 。结果应如下所示:

[[nan  1.  0. nan nan nan nan nan]
 [nan nan  1. nan nan nan nan nan]
 [nan  1.  0. nan nan nan nan nan]
 [nan nan  1. nan nan nan nan nan]
 [nan  1.  0. nan nan nan nan nan]
 [nan nan  1. nan nan nan nan nan]
 [nan  1.  0. nan nan nan nan nan]
 [nan nan  1. nan nan nan nan nan]]

执行此操作的优雅方法是什么?

如果保证每一行至少有一个非nan条目:

a[np.arange(len(a)),np.isnan(a).argmin(axis=1)] = -1

这利用了这样一个事实,即如果存在并列最小值,argmin 会选择第一个。