在numpy中迭代矩阵

时间:2013-12-20 18:30:21

标签: python numpy

如何在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))

2 个答案:

答案 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))