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

Python Numpy-更改每行og ma中的第一个非nan值,python,numpy,nan,Python,Numpy,Nan,我有以下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

我有以下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选择第一个。如果保证每行至少有一个非nan条目,则:

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

这使用了这样一个事实,即如果存在并列的极小值,argmin选择第一个。

a[np.arange(len(a)),np.isnan(a)。argmin(axis=1)]=-1
?是的,这就成功了。你想把你的评论升级成一个答案,这样这个帖子就可以关闭了吗?
a[np.arange(len(a)),np.isnan(a).argmin(axis=1)]=-1
?是的,这就可以了。是否愿意将您的评论升级为答案,以便关闭此线程?