我正在使用 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 的大小,但我发现这非常低效。
谢谢。