numpy数组中的随机有效数据项

时间:2019-03-29 17:13:17

标签: numpy

假设我有一个如下的numpy数组:

data = np.array([[1, 3, 8, np.nan], [np.nan, 6, 7, 9], [np.nan, 0, 1, 2], [5, np.nan, np.nan, 2]])

我想从数组中随机选择n个有效项目,包括它们的索引。

numpy是否提供了一种有效的方法?

2 个答案:

答案 0 :(得分:1)

示例

manager

获取有效索引

data = np.array([[1, 3, 8, np.nan], [np.nan, 6, 7, 9], [np.nan, 0, 1, 2], [5, np.nan, np.nan, 2]])
n = 5

通过索引选择大小为y_val, x_val = np.where(~np.isnan(data)) n_val = y_val.size 的随机子集

n

将索引应用于有效坐标

pick = np.random.choice(n_val, n)

获取相应数据

y_pick, x_pick = y_val[pick], x_val[pick]

欣赏

data_pick = data[y_pick, x_pick]

答案 1 :(得分:0)


Find nonzeros by :


In [37]: a = np.array(np.nonzero(data)).reshape(-1,2) 

In [38]: a                                            
Out[38]:                                              
array([[0, 0],                                        
       [0, 0],                                        
       [1, 1],                                        
       [1, 1],                                        
       [2, 2],                                        
       [2, 3],                                        
       [3, 3],                                        
       [3, 0],                                        
       [1, 2],                                        
       [3, 0],                                        
       [1, 2],                                        
       [3, 0],                                        
       [2, 3],                                        
       [0, 1],                                        
       [2, 3]])                                       

Now pick a random choice :


In [44]: idx = np.random.choice(np.arange(len(a)))

In [45]: data[a[idx][0],a[idx][1]]
Out[45]: 2.0