我正在尝试编写一个快速方法来计算 double 类型的一维数组的累积和,但是我的幼稚实现非常慢,我不确定如何加快速度上我的方法。
我的第一个方法是创建一个相同维度的空数组,并在 for 循环中用各自的累积和填充它。
void cumsum_d(int size, double arr[size]) {
double* out = (double*)malloc(size*sizeof(double));
for (int i = 0; i < size; ++i) {
double temp = 0;
for (int j = 0; j < i+1; ++j) {
temp += arr[j];
}
out[i] = temp;
}
for (int i = 0; i < size; ++i) {
arr[i] = out[i];
}
free(out);}
我的第二次尝试是使用递归修改数组
void cumsum_d2(int size, double arr[size], int ind) {
if (ind == 0) {
return;
}
double temp = 0;
for (int i = 0; i < ind+1; ++i) {
temp += arr[i];
}
arr[ind] = temp;
cumsum_d2(size, arr, ind-1);}
对于长度为 1000 的数组,运行时间约为。 1ms 而例如NumPy 实现 NumPy.cumsum()
只需大约 60μs。
是否有任何关于如何加快代码速度的提示/技巧,或者是否存在任何重大缺陷?
最佳答案
A 已经在评论中说过,这就足够了:
int main()
{
double arr[10] = {1., 2., 3., 4., 5., 6., 7., 8., 9., 10.};
for (char i=1; i<10; i++) {
arr[i] = arr[i] + arr[i-1];
printf("%f\n", array[i]);
}
}
关于arrays - C 中数组的快速累积和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64592530/