当前位置:  开发笔记 > 编程语言 > 正文

将数组中的每个元素乘以C中的数字

如何解决《将数组中的每个元素乘以C中的数字》经验,为你挑选了2个好方法。

我正在尝试在C中优化我的一些代码,这比下面的代码段大很多.来自Python,我想知道你是否可以简单地将整个数组乘以我下面的数字.

显然,它不像我在下面那样工作.有没有其他方法可以实现相同的功能,或者我必须像for循环一样遍历整个数组?

void main()
{
    int i;
    float data[] = {1.,2.,3.,4.,5.};

    //this fails
    data *= 5.0;

    //this works
    for(i = 0; i < 5; i++) data[i] *= 5.0;

}

simonc.. 8

没有捷径你必须逐步完成数组的每个元素.

但请注意,在您的示例中,您可以通过使用int而不是使用float数据和乘数来实现加速.



1> simonc..:

没有捷径你必须逐步完成数组的每个元素.

但请注意,在您的示例中,您可以通过使用int而不是使用float数据和乘数来实现加速.


谢谢!是的,我的真实数据是花车.我只是懒得把它放在这里.

2> 小智..:

如果你愿意,你可以通过优化的BLAS,基本线性代数子程序做你想做的事.这不是C标准,它是你必须自己安装的软件包.

示例代码实现您想要的:

#include 
#include 
#include 
int main () {            
    int limit =10;
    float *a =  calloc( limit, sizeof(float));
    for ( int i = 0; i < limit ; i++){
        a[i] = i;
    }
    cblas_sscal( limit , 0.5f, a, 1); 

    for ( int i = 0; i < limit ; i++){
        printf("%3f, " , a[i]);
    }
    printf("\n");
}

函数的名称并不明显,但阅读指南可能会开始猜测BLAS函数的作用.sscal()可以拆分s单精度scalfor scale,这意味着此函数适用于浮点数.具有相同功能的双精度被调用dscal().

如果你需要使用常量缩放矢量并将其添加到另一个,BLAS也可以获得一个函数:

saxpy()
s      a x p y
float  a*x + y
y[i] += a*x

正如你可能猜到的那样,也有一个daxpy()可行的doubles.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有