用重复指示重塑MATLAB矩阵

时间:2016-06-30 23:05:54

标签: matlab sorting reshape

如果这是一个重复的问题,我道歉。

假设我有一个矩阵A

0 1 2 3 4 5 6 7
8 9 1 2 3 4 5 6

和向量b [1,2,3,4,1,2,3,4]。因此,矩阵A包含基于向量b的多个有序测量。

如何将矩阵重塑为维度[2 2 4],以便A(:,:,1) = [0,4;8,3]

我理解我需要reshape。我尝试使用permute,但它不处理重复的索引。

谢谢!

2 个答案:

答案 0 :(得分:2)

你很接近,你只需要在重新整形之前对列进行排序

A=[0 1 2 3 4 5 6 7; 8 9 1 2 3 4 5 6]

%A =
%     0     1     2     3     4     5     6     7
%     8     9     1     2     3     4     5     6

b=[1,2,3,4,1,2,3,4]

%b =
%     1     2     3     4     1     2     3     4 

[~,idx]=sort(b)

%idx =
%     1     5     2     6     3     7     4     8

A=A(:,idx)

%A =
%     0     4     1     5     2     6     3     7
%     8     3     9     4     1     5     2     6

A=reshape(A,[2,2,4])

%A(:,:,1) =
%     0     4
%     8     3

%A(:,:,2) =
%     1     5
%     9     4

%A(:,:,3) =
%     2     6
%     1     5

%A(:,:,4) =
%     3     7
%     2     6

请注意,这只有在您可以确保b中的每个数字重复相同的次数时才有效。

答案 1 :(得分:2)

假设你的b总是有一些重复的1:n模式,就像你的问题一样,你可以使用:

p=4 % number of indices
permute(reshape(A,size(A,1),p,[]),[1,3,2])