【发布时间】:2017-07-18 10:00:18
【问题描述】:
考虑三个矩阵X1、X2、X3 在 Matlab 中的维度为Nx(N-1),列出了0,1,...,10 中的一些整数。
我想对X1、X2、X3 wrto X1、那么X2的每一行中的元素重新排序(如果@987654331的某些元素@ 相等),则 X3(如果X2 的某些元素相等) 升序排列。
示例 1
N=3;
X1=[3 8;
7 7;
2 1];
X2=[10 1;
10 9;
4 4];
X3=[1 1;
1 0;
1 0];
%I want to obtain
X1new=[3 8;
7 7;
1 2];
X2new=[10 1;
9 10;
4 4];
X3new=[1 1;
0 1;
0 1];
示例 2
N=4;
X1=[3 8 9;
7 6 6;
2 1 4;
4 4 4];
X2=[10 1 2;
9 10 10;
4 4 5;
5 5 2];
X3=[1 1 1;
0 0 1;
1 0 0;
0 0 0];
%I want to obtain
X1new=[3 8 9;
6 6 7;
1 2 4;
4 4 4];
X2new=[10 1 2;
10 10 9;
4 4 5;
2 5 5];
X3new=[1 1 1;
0 1 0;
0 1 0;
0 0 0];
这段代码做我想做的事。对于size(Y,1) 很大的情况,您能否建议更有效的替代方案(如果有)?
% 1) Create a 3d matrix Y of dimension Nx(N-1)x3
Y=NaN(N,N-1,3);
Y(:,:,1)=X1;
Y(:,:,2)=X2;
Y(:,:,3)=X3;
% 2) Reorder elements in each row (independently)
%wrto Y(:,:,1), then Y(:,:,2), then Y(:,:,3) in ascending order.
%Store everything in Ynew of dimension Nx(N-1)x3
Ynew = NaN(N,N-1,3);
for h = 1:size(Y,1),
Ynew (h,:,:) = sortrows(squeeze(Y(h,:,:)), [1 2 3]);
end
% 3) Create X1new, X2new, X3new
X1new=Ynew(:,:,1);
X2new=Ynew(:,:,2);
X3new=Ynew(:,:,3);
【问题讨论】:
-
应该
X2new是[1 10;9 10; 4 4]而不是[10 1;9 10; 4 4]? -
@Steve 不,我只在
X1中的某些元素相等时才重新排序X2。 -
我还是不太明白你的意思。也许你可以逐步完成你的例子。
-
由于您的流程是顺序的(检查 x1,然后是 x2,...)我认为您无法线性化您的代码。
标签: matlab