arrays - C 中数组的快速累积和

标签 arrays c algorithm

我正在尝试编写一个快速方法来计算 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/

相关文章:

c - 如何从串口读取数据并将其写入文件

c - 这是 lapack 问题还是我的代码中的错误?

algorithm - 哈密​​顿路径与最短路径

算法动态规划

java - 打印数组内的内容

进行公差分析的代码

c - 如何将 double 值转换为 uint8_t string[] 以在 atmel studio 的终端窗口上打印

algorithm - 了解希尔密码算法

java - 这个 Java 对工作问卷的回复有效吗?

python - 比较两个 numpy 数组