Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy使用带有nan的索引列表替换每行的特定列索引_Python_Numpy - Fatal编程技术网

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]])