Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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,我有一个零数组 arr = np.zeros([5,5]) array([[ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.], [ 0., 0., 0., 0., 0.]]) 我想根据索引分配值,所以我这样做了 out = np.array([[nan,2.,4.,1.,1.],[nan,3.,4.,4

我有一个零数组

arr = np.zeros([5,5])
array([[ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.]])
我想根据索引分配值,所以我这样做了

out = np.array([[nan,2.,4.,1.,1.],[nan,3.,4.,4.,4.]])

arr[out[0].astype(int),np.arange(len(out[0]))] = 1
arr[out[1].astype(int),np.arange(len(out[1]))] = 1
如果存在0而不是nan,则赋值工作正常

如果是nan,我如何跳过作业?是否可以从多维索引数组而不是使用for循环一次赋值

掩盖它-

mask = ~np.isnan(out)
arr[out[0,mask[0]].astype(int),np.flatnonzero(mask[0])] = 1
arr[out[1,mask[1]].astype(int),np.flatnonzero(mask[1])] = 1
样本运行-

In [171]: out
Out[171]: 
array([[ nan,   2.,   4.,   1.,   1.],
       [ nan,   3.,   4.,   4.,   4.]])

In [172]: mask = ~np.isnan(out)
     ...: arr[out[0,mask[0]].astype(int),np.flatnonzero(mask[0])] = 1
     ...: arr[out[1,mask[1]].astype(int),np.flatnonzero(mask[1])] = 1
     ...: 

In [173]: arr
Out[173]: 
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  1.,  1.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  1.,  1.]])
或者,将
flatnonzero
调用替换为范围屏蔽-

r = np.arange(arr.shape[1])
arr[out[0,mask[0]].astype(int),r[mask[0]]] = 1
arr[out[1,mask[1]].astype(int),r[mask[1]]] = 1

如果您处理的行比只处理
2
的行多得多,并且希望以矢量化的方式分配它们,那么有一种方法,使用
线性索引
-

n = arr.shape[1]
linear_idx = (out*n + np.arange(n))
np.put(arr, linear_idx[~np.isnan(linear_idx)].astype(int), 1)

先生和我的第二个问题。@Bharathshetty第二个问题在哪里?如果不使用arr[out[0…和arr[out[1…是否可以在一行中写入相同的内容