我有N*M矩阵和两个1*M行向量我想对它们进行矢量化数学运算

mar*_*our 2 matlab vectorization

我有N乘M矩阵A,1乘M矩阵或行向量B和另外1乘M行向量C.我可以更多地向量化下面的代码吗?

for i = 1:N
     A(i,:) = (A(i,:)-B)./C;
end;
Run Code Online (Sandbox Code Playgroud)

那么我们有K个M矩阵(K可以被N整除)而不是矢量的更一般情况呢?

And*_*eak 5

这是bsxfun为了做到这一点:

A = bsxfun(@rdivide,bsxfun(@minus,A,B),C);
Run Code Online (Sandbox Code Playgroud)

它将自动扩展大小的数组以与大小的数组[1 M]兼容[N M],然后对它们执行必要的数组操作,返回一个大小的数组[N M].

如果你的BC数组的大小[K M],那么它有点困难.您没有指定输出的形状,但在最常见的情况下,您可以为每一行计算"(AB)/ C",BC在大小数组中收集这些矩阵[K N M]:

A = bsxfun(@rdivide,bsxfun(@minus,permute(A,[3 1 2]),permute(B,[1 3 2])),permute(C,[1 3 2]));
Run Code Online (Sandbox Code Playgroud)

其中A被变换为尺寸的阵列[1 N M],并且两个BC被转换为大小[K 1 M].根据不同尺寸的阵列大小,你可能会受益M于前面的(因为这是你减去的尺寸,但我不确定.