给定一个偶数n,我想制作一个3^(n/2)-1
乘以n
的2d-numpy数组。每行的前一半应该遍历所有可能的-1、0、1值,而后一半应该为零。然而,前一半不应该全是零。
这段代码几乎可以工作,但它包括了我不想要的全零行。
n = 4
M = [list(row) +[0]*(n/2) for row in itertools.product([-1,0,1], repeat = n/2)]
print np.array(M)
它提供了
[[-1 -1 0 0]
[-1 0 0 0]
[-1 1 0 0]
[ 0 -1 0 0]
[ 0 0 0 0]
[ 0 1 0 0]
[ 1 -1 0 0]
[ 1 0 0 0]
[ 1 1 0 0]]
有没有一种更少可怕,更高效利用时间和空间的方法来完成这个任务?最终
n
将是30,当我设置 n=30
时,3^15 只有14,348,907,但代码在我的8GB机器上使用了所有内存,并且需要很长时间。如何直接创建 numpy
数组而不是通过 itertools
、list
等方式?