Matlab通过多次迭代相同的命令来创建矩阵,而不需要for循环

时间:2016-07-19 13:15:48

标签: matlab loops matrix sparse-matrix

我有这样的代码:

A = [sparse(round(rand(4,4)))];
B = [sparse(round(rand(1,4)))];
C = [bsxfun(@minus,A(1,:),B); bsxfun(@minus,A(2,:),B); bsxfun(@minus,A(3,:),B); bsxfun(@minus,A(4,:),B);]

是否有可能以某种方式为大量行定义C(这样我无法以这种方式物理打印命令)没有循环(因为循环会花费相当长的时间)?

2 个答案:

答案 0 :(得分:2)

如果将矩阵和行向量传递给bsxfun,它会自动将向量应用于矩阵的所有行,因此只需使用:

C = bsxfun(@minus, A, B);

无论你有多少行,这都会将行向量B减去矩阵A的所有行。

编辑:如果你有两个矩阵而不是矩阵和矢量,你可以使用排列或arrayfun。看看:

Multiply all columns of one matrix by another matrix with bsxfun

答案 1 :(得分:2)

另外一个选择:

如果您希望保留稀疏矩阵:

C = A - repmat(B,size(A,1),1); %but slower than the bsxfun version.