我想用scipy-weave来计算一个长度取决于数据的数组。让我们采用问题的简化版本,获取累积总和,直到达到给定的阈值:
from scipy.weave import inline
import numpy as np
def cumsum_until(arr, limit):
n = len(arr)
code = '''
py::list ret;
float sum = 0;
for(int i = 0; i < n; i++) {
sum += arr[i];
if (sum < limit)
ret.append(sum);
else
break;
}
return_val = ret;
'''
R = inline(code,['arr', 'limit', 'n'])
print R
print cumsum_until(arr = np.array([1,2,3,4,5]), limit = 11)
[1.0,3.0,6.0,10.0]
现在,使用python列表执行它并不高效 - 我可以在纯python *中更快地完成此操作。似乎使用的合适的c结构是std :: vector,但我无法弄清楚如何将最终产品导出回python。有谁知道如何有效地做到这一点?
*编辑:或者我认为......似乎在编织中构建列表实际上比在python中执行快3-4倍。但是,我仍然希望通过使用纯C ++结构来获得更大的增长。