为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2023-09-05 17:14:12
假设我有 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 的随机选择。有没有办法可以更好的优化呢?
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

从那里获取所有非零坐标和样本更容易:


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]


查看完整回答
反对 回复 2023-09-05
?
慕村225694

TA贡献1880条经验 获得超4个赞

你可以argwhere尝试permutation


a = np.array([[0, 1], [1, 0]])


b = np.argwhere(a)

tuple(np.random.permutation(b)[0])


查看完整回答
反对 回复 2023-09-05
  • 2 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信