我正在使用scipy.weave来提高我的python代码的性能。基本上,我必须通过一个长数组(1024 ^ 3,3)-i.e.一个包含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的大小,但我觉得效率非常低。
感谢。