Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中将函数应用于两个矩阵中的每对列_Matlab - Fatal编程技术网

在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的所有组合。这

在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的所有组合。这有点复杂,因为大向量可以快速填充内存

如果您的功能是标准功能之一,您可以尝试使用:

另一种方法是使用和排列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)');