【问题标题】:New coordinates when reshaping a Matrix in Matlab在 Matlab 中重塑矩阵时的新坐标
【发布时间】:2020-05-07 01:10:58
【问题描述】:

使用s1=size(A,1)s2=size(A,2)s3=size(A,3)s4=size(A,4) 获取一个 4-D 矩阵 A

考虑

 B=reshape(A, s1*s2*s3*s4,1)

例如,

  s1=2;
  s2=3;
  s3=2;
  s4=4;
  A(:,:,1,1)=[1 2 3; 4 5 6];
  A(:,:,1,2)=[7 8 9; 10 11 12];
  A(:,:,1,3)=[13 14 15; 16 17 18];
  A(:,:,1,4)=[19 20 21; 22 23 24];
  A(:,:,2,1)=[25 26 27; 28 29 30];
  A(:,:,2,2)=[31 32 33; 34 35 36];
  A(:,:,2,3)=[37 38 39; 40 41 42];
  A(:,:,2,4)=[43 44 45; 46 47 48];
  B=reshape(A, s1*s2*s3*s4,1);
  %B=[1;4;2;5;3;6;25;28;26;29;27;30;7;10;8;11;9;12;...]; 

给定坐标(i,j,h,k),我希望您能帮助我编写一个函数,让我获得A(i,j,h,k)B 中的位置。

A 是一个 3-D 矩阵时,我知道该怎么做。在这种情况下,

position_in_B= i + ( j-1 + (h-1)*s2 ) * s1; 

如何将此结果扩展到 4-D 矩阵?

【问题讨论】:

  • 为什么不使用 ind2sub?
  • 我试过这个但不起作用:i=1;j=1;h=1;k=1;ind = [i j h k];sz = [s1 s2 s3 s4];position_in_B = ind2sub(sz,ind);
  • 实际上ind2sub 似乎从B 变为A。在这里我想反过来。
  • position_in_B = sub2ind(size(A), i,j,h,k)?

标签: matlab


【解决方案1】:

这里可以使用sub2ind,例如:

B(sub2ind(size(A),1,1,1,4))

或者你可以继续你写的扩展:

position_in_B= @(i,j,h,k) i + ( j-1 + ( h-1 + (k-1) *s3 ) *s2 ) * s1;

B(position_in_B(1,1,1,4))

【讨论】:

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