我有这样的代码:
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(这样我无法以这种方式物理打印命令)没有循环(因为循环会花费相当长的时间)?
答案 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.