在Matlab中重塑4d矩阵后的坐标

时间:2018-10-30 17:33:07

标签: matlab

假设我在Matlab中有一个大小为A的矩阵MxNxKxP。假设我使用A在列向量B中变换reshape。我想要一个代码,给定(i,j,h,p)中第A个元素的坐标,给我一个k中相同元素的坐标B。你能帮我做到吗?

This代码可将其用于3d矩阵,但我不知道如何将其推广到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 :(得分:2)

重塑时,数组的元素不会更改内存中的顺序。因此,linear index保持不变。您可以使用sub2ind(作为rahnema1 suggested in a comment)从(i,j,h,p)坐标中获得线性索引。

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

现在,对于通过重塑B而获得的任何A

A(index) == B(index)

您可以使用ind2subB中检索坐标:

B = reshape(A,4,3,2);
[i,j,h] = ind2sub(size(B),index);