通过矢量化优化代码

时间:2016-07-17 17:05:18

标签: matlab optimization vectorization

我想在多维函数上加速一些嵌套的for循环,所以我尝试对它进行矢量化。在这里,我已经制作了我正在运行的代码类型的简化版本:

xval = [1, 2, 3, 4];
thetaval = [0, 0, 0, 0];

p11 =  @(x, theta) 1*x;
p12 =  @(x, theta) 2*x.*exp(1i*theta);
p21 =  @(x, theta) 2*x.*exp(1i*theta);
p22 =  @(x, theta) 4*x.^2;

a = bsxfun(p11, xval, thetaval)
b = bsxfun(p12, xval, thetaval)
c = bsxfun(p21, xval, thetaval)
d = bsxfun(p22, xval, thetaval)

combo = [a, b, c, d]

q = size(xval);
length = q(2);

reshape(combo, 2, 2,4)

我的主要问题是: 这段代码"是否已正确矢量化"?也就是说,我是否有效地使用了matlab的资源?我可以让它更快吗?当xval和thetaval各约为50,000个元素时怎么样?

一些不那么重要的问题:

是否有更优雅的方式来编写此代码?我觉得我做了一个非常简单的任务,如果没有更多简化的基础设施来处理函数向量,我会感到惊讶。我看到simple ways实现了这个,但是当我给它一个函数实际上是一个函数数组时,bsxfun会中断。

单独调用这些函数当然不够优雅,但它也效率低下?我现在的实际代码中的函数数量是36,但后来我可能想要升级到100甚至1000。

0 个答案:

没有答案