我想用NumPy复制MatLab的randperm()
。
目前,要获得randperm(n, k)
,我使用np.random.permutation(n)[:k]
。问题是它分配了一个大小为n
的数组,然后只有k
个条目。
有没有更高效的内存直接创建数组的方法?
我想用NumPy复制MatLab的randperm()
。
目前,要获得randperm(n, k)
,我使用np.random.permutation(n)[:k]
。问题是它分配了一个大小为n
的数组,然后只有k
个条目。
有没有更高效的内存直接创建数组的方法?
3条答案
按热度按时间vxqlmq5t1#
基于@TaQ的答案:
等同于MatLab的
randperm()
。更新:我也会更新他的答案来标记它。
2o7dmzc52#
我可以推荐你
np.random.choice(n, k, replace = False)
。然而,我不确定内存效率。请参考docsqzwqbdag3#
numpy.random.choice(n, k, replace=False)
的内存效率并不比numpy.random.permutation(n)[:k]
高。它也会创建一个包含n
项的临时列表,对该列表进行置乱,并从该列表中获取k
项。请参见:然而,从NumPy 1.17开始,
numpy.random.*
函数(如numpy.random.choice
和numpy.random.permutation
)已成为遗留函数,出于向后兼容的原因,它们的算法-效率低下和全部-预计将保持不变(请参见最近的RNG policy for NumPy)。幸运的是,从1.17版开始,NumPy有一个替代方案:
numpy.random.Generator.choice
,它使用了更高效的实现,如下所示:如果您使用的是NumPy 1.17或更高版本,则应该在较新的应用程序中使用1.17版中引入的新的伪随机数生成系统,包括
numpy.random.Generator
。