【问题标题】:how to add 3 matrices with one dimension same for all and other dimension different in matlab?如何在matlab中添加3个一维相同而其他维度不同的矩阵?
【发布时间】:2017-02-14 14:35:15
【问题描述】:

我有矩阵 A=2x2 B=2x4 C=2x2 例如我希望得到一个矩阵 D=2x16

A=[1 3;
   2 4]
B=[3 2 4 2;
   4 3 6 3]
C=[4 5;
   7 5]
D=[(1+3+4) (1+3+5) (1+2+4) (1+2+5) (1+4+4) (1+4+5) (1+2+4) (1+2+5) (3+3+4) (3+3+5) (3+2+4) (3+2+5) (3+4+4) (3+4+5) (3+2+4) (3+2+5);
   (2+4+7) (2+4+5) (2+3+7) (2+3+5) (2+6+7) (2+6+5) (2+3+7) (2+3+5) (4+4+7) (4+4+5) (4+3+7) (4+3+5) (4+6+7) (4+6+5) (4+3+7) (4+3+5)]

表示将逐行元素添加到结果中。我有一个 A=2x1 的代码,但我可以理解如何根据 A=2x2 来塑造它,代码如下所示

[rows,col_B]=size(B);
[~,col_C]=size(C);
result=zeros(rows,col_B*col_C);
for i=1:col_B
    for  j=1:col_C
        result(:,(i-1)*col_C+j)=A+B(:,i)+C(:,j);
    end
end

谁能告诉我这段代码中输出 RESULT 的语法?

【问题讨论】:

  • 您能否更准确地说明您要添加的内容?你说你想要 A1+B1+C1 .... A1+B1+C16,但在你的例子中你做了一些不同的事情。在您的示例中,它是 A1+B1+C1 .... A1+B1+C4, A1+B2(!!!)+C5 .... A1+B2+C8, A1+B3(!!!)+C9 。 ... A1+B3+C12
  • 请检查已编辑的问题
  • 无法理解您的问题
  • D 的第 1 行显示 A 的第一行添加到 B 和 C 的第一行,这样每个元素都添加到 B 和 C 的所有可能组合中

标签: matlab element addition


【解决方案1】:

试试

D = kron(A,ones(1,size(B,2)*size(C,2)))+repmat(kron(B,ones(1,size(C,2))),1,size(A,2))+repmat(C,1,size(B,2)*size(A,2))

解释:kron(Mat, ones(1,num2RepeatColumns)),重复矩阵的每一列,Mat。所以“重复”两次使得A = [1 2; 3 4]变成A = [1 1 2 2; 3 3 4 4],见Matlab: repeat every column sequentially n times

repmat(Mat, 1, num2RepeatMatrix) 复制整个矩阵 Mat 并将其“粘贴”到原始矩阵旁边,因此 A=[1 2; 3 4] 变为 A = [1 2 1 2; 3 4 3 4]。请参阅 repmat 的“水平堆栈”示例:https://www.mathworks.com/help/matlab/ref/repmat.html

D=[];
for ii=1:size(A,2)
    D=[D,A(:,ii)+kron(B,ones(1,size(C,2)))+repmat(C,1,size(B,2))];
end

【讨论】:

  • 嗯,repelem 重复 B 的每一列,多少次? C 列的#。 repmat 重复整个矩阵 C,多少次? B 列的#。所以这些有点像“隐藏”循环。谷歌每个函数,或者我可以在编辑中明确地显示给你 - 但首先要确保它是你想要的答案 - 我认为你在上面的 D 中有错字。
  • 现在试试?我更换了排斥
  • 这适用于具有相同行数的矩阵的任何维度吗?因为它给出的错误是使用 + Matrix 尺寸必须一致。我的实际问题包含 A=8x16,B=8x192 和 C=8x16
  • 试过但失败了。如果你能理解,我可以把我的代码发给你吗?
  • 我现在无法访问 matlab,如果有,size(A(:,1)), size(kron(B,ones(1,size(C,2)))), size(repmat(C,1,size(B,2))),请告诉我答案,我应该可以解决它。
猜你喜欢
  • 2017-07-02
  • 2020-10-27
  • 2017-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-28
  • 1970-01-01
相关资源
最近更新 更多