首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB矩阵列减法

MATLAB矩阵列减法
EN

Stack Overflow用户
提问于 2018-03-11 16:00:07
回答 2查看 73关注 0票数 0

我正在努力解决以下问题。

我有两个矩阵,假设A和B的维数可以随时间变化,我想创建一个新的矩阵C,如下所示:

我想从矩阵A的所有列中减去矩阵B中的所有列,因此,如果矩阵A为1 2;5 6;8 5和矩阵B2 2;2 1;3 5,则矩阵C为1-2 1- 2 -2 -2- 2-2;5-2 5-1 6-2 6-1;8-3 8-5 5-3 5-5。

我试过这段代码,但是在某个地方有个错误,我找不到它。请您更正代码,使其工作,或提供一个更好的解决方案,以获得正确的结果?

代码语言:javascript
复制
  matrixA=[4 5; 4 7;9 6];
  matrixB=[3 6 4;5 8 9;4 1 2];

[m,n]=size(matrixA);
[o,p]=size(matrixB);

C = zeros(m,n*p);
for p = 1:n
  for q = 1:p
    C(:,3*p+q-3) = matrixA(:,p)-matrixB(:,q);
  end
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-11 16:26:56

我还没有研究过您的代码,但是您可以使用permutebsxfunreshape实现更简单和矢量化的代码

代码语言:javascript
复制
A = [1 2;5 6;8 5];
B = [2 2;2 1;3 5];
C = reshape(bsxfun(@minus, permute(A, [1 3 2]), B), size(A,1), []);

从R2016b开始,bsxfun不必了

代码语言:javascript
复制
C = reshape(permute(A, [1 3 2]) - B, size(A,1), []);
票数 3
EN

Stack Overflow用户

发布于 2018-03-11 16:54:52

列大小相等的矩阵的示例非常容易处理:

代码语言:javascript
复制
matrixA = [1 2; 5 6; 8 5];
matrixB = [2 2; 2 1; 3 5];

A = repelem(matrixA,1,2);
B = repmat(matrixB,1,2);
C = A - B

C =
     -1    -1     0     0
      3     4     4     5
      5     3     2     0

但是对于处理不匹配的列大小,事情会变得更复杂一些:

代码语言:javascript
复制
matrixA = [1 2; 5 6; 8 5];
matrixB = [2 2; 2 1; 3 5];

A = repelem(matrixA,1,size(matrixB,2));
B = repmat(matrixB,1,size(matrixA,2));
C = (B - A) .* -1

C =
    -1    -1     0     0
     3     4     4     5
     5     3     2     0

matrixA = [4 5; 4 7; 9 6];
matrixB = [3 6 4; 5 8 9; 4 1 2];

A = repelem(matrixA,1,size(matrixB,2));
B = repmat(matrixB,1,size(matrixA,2));
C = (B - A) .* -1

C =
     1    -2     0     2    -1     1
    -1    -4    -5     2    -1    -2
     5     8     7     2     5     4
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49222003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档