猿问

根据numpy中的条件随机选择索引

假设我有 2D numpy 数组,值为 0 和 1。我想随机选择一个包含 1 的索引。有没有有效的方法可以使用 来做到这一点numpy

我用纯Python实现了它,但是太慢了。

输入示例:

[[0, 1], [1, 0]]

输出:

(0, 1)

编辑:为了澄清:我希望我的函数获取值属于 {0, 1} 的 2D numpy 数组。我希望输出是从给定数组中随机(均匀)选取值的元组(2D 索引),该值等于 1。

EDIT2:根据 Paul H 的建议,我想出了这个:

    nonzero = np.nonzero(a)  
      return random.choice(list(zip(nonzero)))

但它不适用于 numpy 的随机选择,仅适用于 python 的随机选择。有没有办法可以更好的优化呢?


守着一只汪
浏览 113回答 2
2回答

犯罪嫌疑人X

从那里获取所有非零坐标和样本更容易:xs,ys = np.where([[0, 1], [1, 0]])# randomly pick a number:idx = np.random.choice(np.arange(len(xs)) )# output:out = xs[idx], ys[idx]

慕村225694

你可以argwhere尝试permutationa = np.array([[0, 1], [1, 0]])b = np.argwhere(a)tuple(np.random.permutation(b)[0])
随时随地看视频慕课网APP

相关分类

Python
我要回答