Новые координаты при изменении формы матрицы в Matlab - PullRequest
1 голос
/ 06 мая 2020

Возьмите 4-мерную матрицу A с s1=size(A,1), s2=size(A,2), s3=size(A,3), s4=size(A,4).

Рассмотрим

 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 - трехмерная матрица. В этом случае

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

Как я могу распространить этот результат на 4-мерные матрицы?

1 Ответ

4 голосов
/ 06 мая 2020

Здесь вы можете использовать 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...