繁体   English   中英

如何在 Python 中生成唯一的随机数作为数组?

[英]how do I produce unique random numbers as an array in Python?

我有一个大小为 (4,4) 的数组,它的值可以是 0 和 1,所以我可以有 65536 个不同的数组。 我需要不重复地生成所有这些数组。 我使用wt_random=np.random.randint(2, size=(65536,4,4))但我担心它们不是唯一的。 你能告诉我这段代码是否正确,我应该怎么做才能产生所有可能的数组? 谢谢你。

您可以使用带有repeat=16 itertools.product来生成所有模式,然后将它们重塑为(4,4)

尝试这个:

import numpy as np
from itertools import product

wt_random = np.array([np.array(p).reshape((4, 4)) for p in product((0, 1), repeat=16)])
np.random.shuffle(wt_random)

print(wt_random.shape)
print(wt_random[1234])

输出:(显示形状正确,以及一个示例元素)

(65536, 4, 4)
[[0 0 0 0]
 [0 1 0 0]
 [1 1 0 1]
 [0 0 1 0]]

你可以使用numpy.meshgrid

output = np.array(np.meshgrid(*[[0,1] for _ in range(16)])).T.reshape(-1, 4,4)

因为您需要获取所有可能的值(可能值的数量 = 2 ^16 = 65536)

您可以将 n 从 1 循环到 65535,然后将等效的二进制映射到您的数组,这将是最简单且 100% 真正唯一且包含所有可能性的。

例如对于 m1->0 : [ [0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0] ] 对于 m2 ->1 : [ [0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,1] ]

     ----------------------------------------------------
     -----------------------------------------------   upto n

对于 m65536->65535 : [ [1,1,1,1], [1,1,1,1], [1,1,1,1], [1,1,1,1] ]

如果您需要以随机顺序排列所有可能的数组,请考虑以任意确定性顺序枚举它们,然后将它们打乱以随机化顺序。 如果您不希望内存中的所有数组,您可以编写一个函数来在确定性列表中的给定位置生成数组,然后对这些位置进行洗牌。 请注意,Fisher-Yates 甚至可能不需要列表的密集表示来洗牌……如果您跟踪已经洗牌的条目的最终位置,您应该有足够的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM