首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >采样一个numpy数组的许多随机排列的最快方法

采样一个numpy数组的许多随机排列的最快方法
EN

Stack Overflow用户
提问于 2022-01-12 14:27:11
回答 1查看 561关注 0票数 1

与许多其他numpy/随机函数不同,numpy.random.Generator.permutation()没有提供在单个函数调用中返回多个结果的明显方法。给定一个(1d) numpy数组x,我希望对xn排列(每个长度为len(x))进行采样,并将结果作为一个具有(n, len(x))形状的numpy数组。生成许多排列的一种天真方法是np.array([rng.permutation(x) for _ in range(n)])。这并不理想,主要是因为循环在Python中,而不是在已编译的numpy函数中。

代码语言:javascript
复制
import numpy as np

rng = np.random.default_rng(1234)
# x is big enough to not want to enumerate all permutations
x = rng.standard_normal(size=20)
n = 10000
perms = np.array([rng.permutation(x) for _ in range(n)])

我的用例是用蛮力搜索来查找使特定属性最小化的排列(构成“足够好”的搜索解决方案)。我可以使用numpy操作来计算每个置换的感兴趣性质,这些操作能够很好地向向量/广播结果的排列矩阵。事实证明,天真地生成排列矩阵是我代码中的瓶颈。有更好的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-12 18:05:43

您可以使用rng.permuted而不是rng.permutation,并将其与np.tile结合起来,以便多次重复x,并对每个副本进行单独的洗牌。以下是如何:

代码语言:javascript
复制
perms = rng.permuted(np.tile(x, n).reshape(n,x.size), axis=1)

在我的机器上,这比你的初始代码快10倍。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70683286

复制
相关文章

相似问题

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