1

我正在使用 scipy.weave 来提高我的 python 代码的性能。基本上,我必须通过一个长数组 (1024^3,3) - 即一个包含 1024^3 个元素的数组,每个元素有 3 个条目 - 为每个元素计算几个东西,然后填充另一个数组。

问题是当数组大于 ~(850**3,3) 时出现分段错误。当我尝试读取位置 (a,3) 处的数组值时,会发生分段错误,其中 a = 715827882。请注意 3*a ~ 2^31。我已经仔细研究过这个问题,在我看来,我无法通过长度大于整数变量大小的数组。

其实这个简单的程序

################################
import numpy as np
import scipy.weave as wv

def printf():

    a=3*1024**3

    support = """
          #include <iostream>
          using namespace std;
    """

    code = """
        cout << a << endl;
    """
    wv.inline(code,['a'],
              type_converters = wv.converters.blitz,
              support_code = support,libraries = ['m'])

printf()
#########################################

输出 -1073741824 而不是 3221225472。这意味着(我认为)变量 a 在 c 代码中被取为 32 位的整数,而不是 64 位。

有谁知道如何解决这个问题?当然,我只能将数组拆分为小于 2^31 的大小,但我发现这非常低效。

谢谢。

4

0 回答 0