Python Numpy使用带有nan的索引列表替换每行的特定列索引
我正在尝试以下方法:Python Numpy使用带有nan的索引列表替换每行的特定列索引,python,numpy,Python,Numpy,我正在尝试以下方法: a = np.array([[1,2,3], [4,5,6], [7,8,9]]) print a array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) a[np.arange(len(a)), [1,0,2]] = 20 #--Code1 print a array([[ 1, 20, 3], [20, 5, 6], [ 7, 8, 20]]) array([[ 1
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a[np.arange(len(a)), [1,0,2]] = 20 #--Code1
print a
array([[ 1, 20, 3],
[20, 5, 6],
[ 7, 8, 20]])
array([[ 1, 20, 3],
[4, 5, 6],
[ 7, 8, 20]])
但是,如果我的索引中有nan
,则如下所示:
a[np.arange(len(a)), [1,np.nan,2]] = 20 #--Code2
它出错了
我想做的是,如果索引中存在nan
,请不要更改任何内容
i、 e.我想实施上述Code2
,以便获得以下信息:
a = np.array([[1,2,3], [4,5,6], [7,8,9]])
print a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
a[np.arange(len(a)), [1,0,2]] = 20 #--Code1
print a
array([[ 1, 20, 3],
[20, 5, 6],
[ 7, 8, 20]])
array([[ 1, 20, 3],
[4, 5, 6],
[ 7, 8, 20]])
使用-
其中,idx
是索引数组
样本运行-
In [161]: a = np.array([[1,2,3], [4,5,6], [7,8,9]])
In [162]: idx = np.array([1,np.nan,2])
In [163]: m = ~np.isnan(idx) # Mask of non-NaNs
...: row = np.arange(a.shape[0])[m]
...: col = idx[m].astype(int)
...: a[row, col] = 20
...:
In [164]: a
Out[164]:
array([[ 1, 20, 3],
[ 4, 5, 6],
[ 7, 8, 20]])