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

The fastest way to apply function to matrix in Matlab

我有 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。我不知道如何将它们矢量化。

最快的方法是 vectorize your function, if that's possible. Vectorizing can sometimes be done by just changing *, /, ^ into their element-wise versions .*, ./, .^. In other cases it may require use of 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);