Numpy,长数组的问题

jon*_*alm 13 python math numpy

我有两个数组(a和b),其中n个整数元素在范围(0,N).

错字:具有2 ^ n个整数的数组,其中最大整数取值N = 3 ^ n

我想计算a和b中每个元素组合的总和(对于所有i,j, sum_ij_ = a_i_ + b_j_ ).然后取模数N(sum_ij_ = sum_ij_%N),最后计算不同总和的频率.

为了快速执行numpy,没有任何循环,我尝试使用meshgrid和bincount函数.

A,B = numpy.meshgrid(a,b)
A = A + B
A = A % N
A = numpy.reshape(A,A.size)
result = numpy.bincount(A)
Run Code Online (Sandbox Code Playgroud)

现在,问题是我的输入数组很长.当我使用2 ^ 13个元素的输入时,meshgrid给了我MemoryError.我想计算具有2 ^ 15-2 ^ 20个元素的数组.

这是n在15到20的范围内

numpy有没有聪明的技巧呢?

任何帮助将受到高度赞赏.

- 琼

Aut*_*tic 7

尝试分块吧.你的meshgrid是一个NxN矩阵,阻止高达10x10 N/10xN/10并且只计算100个bin,最后将它们加起来.这只占整个内存的1%〜1%.