【问题标题】:how to repeat element matrix in matlab如何在matlab中重复元素矩阵
【发布时间】:2012-07-16 13:29:24
【问题描述】:

如何重复

A = [ 1 2 ; 
      3 4 ]

重复

B = [ 1 2 ; 
      2 1 ]

所以我想要像矩阵 C 一样的答案:

C = [ 1 2 2; 
      3 3 4 ]

感谢您的帮助。

【问题讨论】:

标签: matlab matrix repeat


【解决方案1】:

只是为了好玩,另一个使用arrayfun的解决方案:

res = cell2mat(arrayfun(@(a,b) ones(b,1).*a, A', B', 'uniformoutput', false))'

这会导致:

res =

     1     2     2
     3     3     4

【讨论】:

  • +1:先生,您始终能制作出非常整洁的单行字:)
【解决方案2】:

为了简单起见,我假设您只是要添加更多列,并且您已经检查了每行的列数是否相同。

然后它变成了重复元素和重塑的简单组合。

编辑我已经修改了代码,因此如果 A 和 B 是 3D 数组,它也可以工作。

%# get the number of rows from A, transpose both
%# A and B so that linear indexing works
[nRowsA,~,nValsA] = size(A);
A = permute(A,[2 1 3]);
B = permute(B,[2 1 3]);

%# create an index vector from B 
%# so that we know what to repeat
nRep = sum(B(:));

repIdx = zeros(1,nRep);
repIdxIdx = cumsum([1 B(1:end-1)]);
repIdx(repIdxIdx) = 1;
repIdx = cumsum(repIdx);

%# assemble the array C
C = A(repIdx);
C = permute(reshape(C,[],nRowsA,nValsA),[2 1 3]);

C =
     1     2     2
     3     3     4

【讨论】:

  • +1 是为了理解问题的神秘逻辑 :)
  • @EitanT:我看到标题中有“重复”,我们应该使用 B 来找出如何重复 A 中的元素。我实际上发现它很明显。无论如何,感谢您的支持:)
  • @jonas : 如果我想用超过矩阵 A 和 B 的值怎么办?
  • @FebriDwiLaksono:我不太明白。可以举个例子吗?
  • @jonas:我的意思是,实际上矩阵 A 有多个 val,例如 (val (;,;,1), val (;,;,2),...)。矩阵 B 也有不止一个 val。所以当我使用你的逻辑时我感到很困难,特别是在 cumsum([1 B(1:end-1)]); 中。你了解乔纳斯吗??
猜你喜欢
  • 1970-01-01
  • 2011-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-09
  • 2015-04-17
  • 2016-08-24
相关资源
最近更新 更多