在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);
我有 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);