假设我在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.
答案 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)
您可以使用ind2sub
在B
中检索坐标:
B = reshape(A,4,3,2);
[i,j,h] = ind2sub(size(B),index);