在MATLAB中将函数应用于两个矩阵中的每对列
在MATLAB中,我想对矩阵在MATLAB中将函数应用于两个矩阵中的每对列,matlab,Matlab,在MATLAB中,我想对矩阵a和B中的每对列向量应用一个函数。我知道必须有一种有效的(非的)方法来做这件事,但我想不出来。该函数将输出一个标量。您是说成对吗?因此,在for循环中,函数将作为标量函数(a(i),B(i))工作。 如果A和B的大小相同,则可以应用该功能: newvector = arrayfun(@(x) func(A(x),B(x)), 1:numel(A)); 更新: 根据您的注释,您需要以scalar\u val=func(A(i),B(j))的形式运行A和B的所有组合。这
a
和B
中的每对列向量应用一个函数。我知道必须有一种有效的(非的)方法来做这件事,但我想不出来。该函数将输出一个标量。您是说成对吗?因此,在for循环中,函数将作为标量函数(a(i),B(i))工作。
如果A
和B
的大小相同,则可以应用该功能:
newvector = arrayfun(@(x) func(A(x),B(x)), 1:numel(A));
更新:
根据您的注释,您需要以scalar\u val=func(A(i),B(j))
的形式运行A和B的所有组合。这有点复杂,因为大向量可以快速填充内存
如果您的功能是标准功能之一,您可以尝试使用:
另一种方法是使用和排列Fun:
[Am, Bm] = meshgrid(A,B);
out = arrayfun(@(x) func(Am(x),Bm(x)), 1:numel(Am));
out = reshape(out, numel(A), numel(B));
我相信它应该能工作,但我现在没有时间测试它。试试看
na = size(A,1);
nb = size(B,1);
newvector = bsxfun(@(j,k)(func(A(j,:),B(k,:))),1:na,(1:nb)');
bsxfun
对1:na和(1:nb)执行单例扩展。在本例中,最终结果是func将应用于从A和B中绘制的每对列向量
请注意,bsxfun可能很棘手:它可能要求应用的函数本身支持单例扩展。在这种情况下,它可以完成您想要的工作。在for循环中,它应该是scalar\u val=func(A(i),B(j))
我尝试了相同的方法,其中func是点积,但它给了我错误,指出点的参数必须具有相同的大小。。。你知道怎么回事吗?@Bob你是否需要按列而不是按行调用:bsxfun(@(j,k)func(A(:,j),A(:,k)),1:na,(1:nb)
works?
na = size(A,1);
nb = size(B,1);
newvector = bsxfun(@(j,k)(func(A(j,:),B(k,:))),1:na,(1:nb)');