【问题标题】:Changing the size of a matrix in MATLAB在 MATLAB 中更改矩阵的大小
【发布时间】:2015-05-18 06:56:28
【问题描述】:

我得到以下大小为 3x1 的矩阵 A 和大小为 5x1 的 B

A =   B=

1     A
2     B
3     C
      D 
      E

我想将矩阵 C 转换为 15x2 矩阵

C =  

1   A  
1   B  
1   C  
1   D
1   E
2   A
  .
  .
  .
3   E

我该怎么做?

【问题讨论】:

  • 查看repmatkron 等...我敢打赌,Luis 会在接下来的 15 分钟内回答一个 bsxfun...

标签: matlab


【解决方案1】:

可以通过repmat完成

D = repmat(A',size(B,1),1);
C = [D(:),repmat(B,size(A,1),1)]

【讨论】:

  • 我认为您必须先将 D 转换为 char 数组,不是吗? C = [D(:)+48,repmat(B,size(A,1),1)] 似乎做到了
  • 我认为,这些字符仅用于说明。否则,他可能应该使用细胞。
  • 另外值得一提的是,自 2015a 起,您可以将 D 替换为 repelem,例如 C = [repelem(A,size(B,1)), repmat(B, size(A,1),1)]
【解决方案2】:

这是基于从Generate All Possible combinations of a Matrix in Matlab 生成真值表的代码的另一种选择

ind = dec2base(0:power(5,2)-1,5)-47;
C = [A(ind(1:15,1) + 48, B(ind(1:15,2)];

如果你想概括它

m = max(size(A,1),size(B,1));
n = size(A,1)*size(B,1);
col = 2;
ind = dec2base(0:power(n,col)-1,n)-47;
ind = ind(1:n,:);
C = [A(ind(:,1) + 48, B(ind(:,2)];

+ 48 只是将您的A 矩阵从数字矩阵转换为字符矩阵,以便C 可以同时包含数字和字母。如果A 已经是一个字符矩阵,则可以省略它。

这项技术的有用之处在于,通过更改 col,这可以概括为以类似方式组合不止 2 个向量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2016-03-08
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多