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 会选择第一个。
我有以下 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 会选择第一个。