我第一次使用 Accelerate 框架,目标是在 iOS 应用程序中实现一些矢量化代码。我从来没有尝试过在 Objective C 或 C 中处理向量方面做任何事情。有一些使用 MATLAB 的经验,我想知道使用 Accelerate 是否确实更痛苦。假设我想计算以下内容:
b = 4*(sin(a/2))^2
其中 a 和 b 是向量。
MATLAB代码:
a = 1:4;
b = 4*(sin(a/2)).^2;
但是,正如我在浏览文档后看到的那样,使用 Accelerate 的情况完全不同。
我的 C 实现:
float a[4] = {1,2,3,4}; //define a
int len = 4;
float div = 2; //define 2
float a2[len]; //define intermediate result 1
vDSP_vsdiv(a, 1, &div, a2, 1, len); //divide
float sinResult[len]; //define intermediate result 2
vvsinf(sinResult, a2, &len); //take sine
float sqResult[len]; //square the result
vDSP_vsq(sinResult, 1, sqResult, 1, len); //take square
float factor = 4; //multiply all this by four
float b[len]; //define answer vector
vDSP_vsmul(sqResult, 1, &factor, b, 1, len); //multiply
//unset all variables I didn't actually need
老实说,我不知道这里最糟糕的是什么:跟踪所有中间步骤,试图记住参数是如何在 vDSP 中相对于 VecLib 传递的(完全不同),或者做一些非常琐碎的事情需要花费大量时间。
我真的希望我在这里遗漏了一些东西,并且大多数步骤可以合并或缩短。任何关于编码资源、良好编码习惯(通过艰苦的方式学习或从书本中学习)等方面的建议都将非常受欢迎!你们都是如何处理多行向量计算的?