Python Numpy-更改每行og ma中的第一个非nan值
我有以下numpy阵列: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
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
?是的,这就可以了。是否愿意将您的评论升级为答案,以便关闭此线程?