如果这是一个重复的问题,我道歉。
假设我有一个矩阵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
,但它不处理重复的索引。
谢谢!
答案 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])