Координаты после изменения формы 4d матрицы в Matlab - PullRequest
0 голосов
/ 30 октября 2018

Предположим, у меня есть матрица A в Matlab размером MxNxKxP. Предположим, я преобразую A в вектор-столбец B, используя reshape. Мне нужен код, который, учитывая координаты (i,j,h,p)-го элемента в A, дает мне координату k того же элемента в B. Не могли бы вы помочь мне сделать это?

Этот код делает это для трехмерных матриц, но я не знаю, как обобщить его до 4d.

Позвольте мне объяснить лучше на примере.

clear all

A(:,:,1,1)=[1 2 3; 4 5 6];
A(:,:,2,1)=[7 8 9; 10 11 12];
A(:,:,1,2)=[13 14 15; 16 17 18];
A(:,:,2,2)=[19 20 21; 22 23 24];

B=reshape(A,[2*3*2*2,1]);

Предположим, changecoord(i,j,h,p) - это функция, которая определяет положение A(i,j,h,p) в B

Затем этот алгоритм должен делиться

%changecoord(1,1,1,1)=1
%changecoord(2,1,1,1)=2
%changecoord(1,1,2,2)=19
%changecoord(1,2,2,2)=21 
%etc.

1 Ответ

0 голосов
/ 30 октября 2018

При изменении формы элементы массива не меняют порядок в памяти. Таким образом, линейный индекс остается неизменным. Вы можете получить линейный индекс из ваших (i,j,h,p) координат, используя sub2ind (как указано в комментарии rahnema1 ).

index = sub2ind(size(A),i,j,h,p);

Теперь для любого B, полученного путем изменения формы A,

A(index) == B(index)

Вы можете получить координаты в B, используя ind2sub:

B = reshape(A,4,3,2);
[i,j,h] = ind2sub(size(B),index);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...