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

时间:2019-07-10 11:12:13

标签: python arrays numpy random

我有一个大小为(4,4)的数组,可以具有值0和1,因此我可以有65536个不同的数组。我需要产生所有这些数组,而无需重复。我使用 reLog { isVerified in print(isVerified) } ,但我担心它们不是唯一的。您能否告诉我此代码正确与否,应该怎么做才能产生所有可能的数组?谢谢。

4 个答案:

答案 0 :(得分:2)

您可以将itertools.productng-if结合使用来生成所有模式,然后将其重塑为repeat=16

尝试一下:

(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])

答案 1 :(得分:2)

您可以使用numpy.meshgrid

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

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

答案 2 :(得分:0)

您可以将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]]

答案 3 :(得分:0)

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