假设我有一个如下的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是否提供了一种有效的方法?
答案 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