我有一个大小为(4,4)的数组,可以具有值0和1,因此我可以有65536个不同的数组。我需要产生所有这些数组,而无需重复。我使用 reLog { isVerified in
print(isVerified)
}
,但我担心它们不是唯一的。您能否告诉我此代码正确与否,应该怎么做才能产生所有可能的数组?谢谢。
答案 0 :(得分:2)
您可以将itertools.product
与ng-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甚至不需要列表的密集表示就可以进行洗牌...如果您跟踪已经洗牌的条目在哪里结束,那么您应该有足够的数量。