首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网格中如何选择不同的随机点

网格中如何选择不同的随机点
EN

Stack Overflow用户
提问于 2017-02-07 02:20:31
回答 1查看 1.4K关注 0票数 3

我有一个2D列表,我需要从这个2D列表中选择n不同的随机点(x,y坐标)。让我先写一下我试图解决这个问题时所发生的事情。

假设网格是300 x 400

  • 笛卡尔产品300 x 400是否获得了120000元素的列表,而不是使用random.choice (大型网格慢)
  • 将所选的点保持在一个集合中,如果产生重复点,则在while循环中再次随机化。(如果n很大,速度很慢且不可预测)

我搜索了一些类似的问题,没有一个是直接解决问题的。我确实找到了This question,尽管用户回答了这个问题,但是他们没有提供一个Python解决方案,我们在这里可以在这个问题中给出这个解决方案。也许可以建议在Python标准库中使用适当的数据结构,如果不是代码本身的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-07 02:31:11

使用random.sample进行示例,而不需要从范围中替换--对于range对象有一个快速的特例。divmod(i, h)i在一维范围内与w * h元素映射到2D网格中的(x, y)的词典学映射。

Python 3:

代码语言:javascript
复制
import random
def samplegrid(w, h, n):
    return [divmod(i, h) for i in random.sample(range(w * h), n)]

Python 2:

代码语言:javascript
复制
import random
def samplegrid(w, h, n):
    return [divmod(i, h) for i in random.sample(xrange(w * h), n)]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42080607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档