在Matlab中将函数应用于矩阵的最快方法

时间:2015-01-07 12:57:35

标签: matlab function matrix

我有Nx2矩阵A和2个变量的函数f

A = [1,2;3,4;5,6;7,8;9,0];
func = '@(x1, x2) sin(x1+x2)*cos(x1*x2)/(x1-x2)';
func = str2func(func);

我可以用这样的方式将函数应用于矩阵:

values = arrayfun(@(x1,x2) func(x1, x2), A(:,1), A(:,2));

它似乎比for-loop更快,但对我的程序来说仍然很慢。 我想知道是否还有其他方法可以更快地完成它?

编辑。程序会生成函数。它们由一些简单的函数组成,如plus,minus,times,expl,ln。我不知道如何对它们进行矢量化。

1 个答案:

答案 0 :(得分:1)

最快的方法是vectorize你的功能,如果可能的话。有时可以通过将*/^更改为元素版本.*./.^来完成向量化。在其他情况下,可能需要使用bsxfun

对于您的示例函数,矢量化非常简单:

A = [1,2;3,4;5,6;7,8;9,0];
x1 = A(:,1);
x2 = A(:,2);
values = sin(x1+x2).*cos(x1.*x2)./(x1-x2);