索引,索引阵列

问题描述:

在与NumPy阵列忽略的NaN我有零索引,索引阵列

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 

如果您正在使用很多ro WS不仅仅是2,你想给它们分配一个量化的方式,这里有一个方法,使用linear-indexing -

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

爵士和我的第二个问题。 – Dark

+0

@Bharathshetty第二个问题在哪里? – Divakar

+0

不使用arr [out [0 ...和arr [out [1 ...是否可以在同一行中写入相同的文件 – Dark