【问题标题】:Linearization of 5D Matrix in MatlabMatlab中5D矩阵的线性化
【发布时间】:2014-08-07 17:45:59
【问题描述】:

假设我有矩阵 A,在 MATLAB 中定义为:

A = zeros(2,2,2,2,2);

A(1,1,1,1,1) = 1;
A(1,1,1,1,2) = 2;
A(1,1,1,2,1) = 3;
A(1,1,1,2,2) = 4;
A(1,1,2,1,1) = 5;
A(1,1,2,1,2) = 6;
A(1,1,2,2,1) = 7;
A(1,1,2,2,2) = 8;

A(1,2,1,1,1) = 9;
A(1,2,1,1,2) = 10;
A(1,2,1,2,1) = 11;
A(1,2,1,2,2) = 12;
A(1,2,2,1,1) = 13;
A(1,2,2,1,2) = 14;
A(1,2,2,2,1) = 15;
A(1,2,2,2,2) = 16;

A(2,1,1,1,1) = 17;
A(2,1,1,1,2) = 18;
A(2,1,1,2,1) = 19;
A(2,1,1,2,2) = 20;
A(2,1,2,1,1) = 21;
A(2,1,2,1,2) = 22;
A(2,1,2,2,1) = 23;
A(2,1,2,2,2) = 24;

A(2,2,1,1,1) = 25;
A(2,2,1,1,2) = 26;
A(2,2,1,2,1) = 27;
A(2,2,1,2,2) = 28;
A(2,2,2,1,1) = 29;
A(2,2,2,1,2) = 30;
A(2,2,2,2,1) = 31;
A(2,2,2,2,2) = 32;

如何将此矩阵转换为新的矩阵 B,使矩阵 B 是一个向量,使得 B = [1,2,3,4...32]?

重塑功能不起作用,我在网上找不到任何帮助。

提前致谢!

【问题讨论】:

  • 值是否总是升序排列?
  • +1 主要用于非常合适的标签

标签: matlab matrix reshape dimensions


【解决方案1】:

您有相反顺序的尺寸来实现您想要的。所以:只需置换尺寸(使用permute)然后线性化(使用:):

B = permute(A, [5 4 3 2 1]);
B = B(:);

如果你想在一行中,使用reshape 进行线性化:

B = reshape(permute(A, [5 4 3 2 1]), [],1);

如果你定义了(注意索引的反转)

A(1,1,1,1,1) = 1;
A(2,1,1,1,1) = 2;
A(1,2,1,1,1) = 3;
A(2,2,1,1,1) = 4;
A(1,1,2,1,1) = 5;
A(2,1,2,1,1) = 6;
A(1,2,2,1,1) = 7;
A(2,2,2,1,1) = 8;
...

尺寸将按“正确”顺序排列,然后您就不需要permute

B = A(:);

B = reshape(A, [],1);    

【讨论】:

  • 非常感谢!如果我有足够的声誉,我会支持你!
  • @rayryeng 谢谢你:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
相关资源
最近更新 更多