【问题标题】:How to reshape a matrix in Matlab after having vectorized some parts of it?在对矩阵的某些部分进行矢量化后,如何在 Matlab 中重塑矩阵?
【发布时间】:2014-11-27 15:19:05
【问题描述】:

我在 Matlab 中有一个矩阵 A

m=4;
s=3;
r=2;
A=[1 2;
   3 4; 
   5 6; 
   7 8; 
   9 10; 
  11 12; 
  13 14; 
  15 16; 
  17 18; 
  19 20; 
  21 22; 
  23 24]; %// (m*s) x r

又想得到矩阵

B=[1 7 13 19; 
   3 9 15 21; 
   5 11 17 23; 
   2 8 14 20; 
   4 10 16 22; 
   6 12 18 24];   %// (s*r) x m

不使用单元格(例如mat2cell)。

【问题讨论】:

  • 我真的看不出你是怎么得到 B 的。你能扩展一下吗?

标签: matlab matrix reshape


【解决方案1】:

代码

B = reshape(permute(reshape(A,s,m,[]),[1 3 2]),s*r,[])

一些解释

上面列出的代码基本上遵循三个步骤,下面列出了这些步骤,以便更好地理解此解决方案,希望还可以指导您在reshaping 上的未来查询 -

  1. 使用最里面的reshape:在每个s 行之后剪切A,并从中创建一个3D 数组,以便每个3D 切片包含A 的每一列的元素。
  2. 用唯一的permute:交换dim2dim3,这样我们就可以根据MATLAB使用的线性索引在下一阶段根据需要使dim3元素更接近dim1元素.
  3. 使用最外层的reshape:重塑元素以使其达到所需的形状(大小)。

【讨论】:

    【解决方案2】:

    你应该使用类似的东西

    cat(1,reshape(A(:,1),3,4),reshape(A(:,2),3,4));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多