如何在numpy中通过n个矩阵(或2d数组)迭代所有2 ^(n ^ 2)二进制n?我会这样:
for M in ....:
您是否必须使用itertools.product([0,1], repeat = n**2)
然后转换为2d numpy数组?
这段代码会给我一个随机的2d二进制矩阵,但这不是我需要的。
np.random.randint(2, size=(n,n))
答案 0 :(得分:4)
请注意,即使是相对较小的n,2**(n**2)
也是一个很大的数字,因此你的循环可能会长时间无限运行。
据说,一种可能的迭代矩阵的方法就是例如
nxn = np.arange(n**2).reshape(n, -1)
for i in xrange(0, 2**(n**2)):
arr = (i >> nxn) % 2
# do smthng with arr
答案 1 :(得分:2)
np.array(list(itertools.product([0,1], repeat = n**2))).reshape(-1,n,n)
生成(2^(n^2),n,n)
数组。
可能有一些numpy'grid'函数也是如此,但我对其他讨论的回忆是itertools.product
非常快。
g=(np.array(x).reshape(n,n) for x in itertools.product([0,1], repeat = n**2))
是一个生成nxn数组的生成器:
g.next()
# array([[0, 0],[0, 0]])
或者生成相同的3d数组:
np.array(list(g))