Arrays 从Matlab中的n个向量创建所有可能的n元组,并以特定方式排序
考虑Matlab中的Arrays 从Matlab中的n个向量创建所有可能的n元组,并以特定方式排序,arrays,matlab,matrix,Arrays,Matlab,Matrix,考虑Matlab中的n行向量,每个向量的大小1xU。比如说, U=20; n=3; sU=[U U U]; vectors = arrayfun(@(x) {1:x}, sU); vectors_augmented{1}=[vectors{1} 8 9 10]; vectors_augmented{2}=[vectors{2} 11 12 13]; vectors_augmented{3}=[vectors{3} 14 15 16]; 其中,向量{1}是第一行向量,向量{2}是第二行向量,
n
行向量,每个向量的大小1xU
。比如说,
U=20;
n=3;
sU=[U U U];
vectors = arrayfun(@(x) {1:x}, sU);
vectors_augmented{1}=[vectors{1} 8 9 10];
vectors_augmented{2}=[vectors{2} 11 12 13];
vectors_augmented{3}=[vectors{3} 14 15 16];
其中,向量{1}
是第一行向量,向量{2}
是第二行向量,向量{n}
是最后一行向量
Tcoord_temp = cell(1,n);
[Tcoord_temp{:}] = ndgrid(vectors{:});
Tcoord_temp = cat(n+1, Tcoord_temp{:});
Tcoord = reshape(Tcoord_temp,[],n);
我们创建大小为U^n x n
的矩阵Tcoord
,从n
行向量报告所有可能的n
-元组。对于Tcoord
的每一行i
,Tcoord(i,1)
是第一行向量的元素,Tcoord(i,2)
是第二行向量的元素t命令(i,n)
是最后一行向量的元素
Tcoord_temp = cell(1,n);
[Tcoord_temp{:}] = ndgrid(vectors{:});
Tcoord_temp = cat(n+1, Tcoord_temp{:});
Tcoord = reshape(Tcoord_temp,[],n);
现在假设I增大3
元素的n
行向量中的每一个。比如说,
U=20;
n=3;
sU=[U U U];
vectors = arrayfun(@(x) {1:x}, sU);
vectors_augmented{1}=[vectors{1} 8 9 10];
vectors_augmented{2}=[vectors{2} 11 12 13];
vectors_augmented{3}=[vectors{3} 14 15 16];
然后,我创建了一个类似于Tcoord
的矩阵,但现在使用vectors\u augmented
Tcoord_temp = cell(1,n);
[Tcoord_temp{:}] = ndgrid(vectors_augmented{:});
Tcoord_temp = cat(n+1, Tcoord_temp{:});
Tcoord_augmented = reshape(Tcoord_temp,[],n); %(U+3)^nxn
我希望您能帮助重新排列矩阵Tcoord\u augmented
中矩阵的行Tcoord\u augmented\u整形
等于Tcoord\U augmented\U整形(1:U^n,:)
Tcoord
的其余行包含Tcoord\u augmented\u reforme
的其他左侧行Tcoord\u augmented
Tcoord_temp = cell(1,n); [Tcoord_temp{:}] = ndgrid(vectors_augmented{:}); Tcoord_temp = cat(n+1, Tcoord_temp{:}); Tcoord_augmented = reshape(Tcoord_temp,[],n); %(U+3)^nxn
Tcoord\u augmented
大小相同的辅助零一矩阵,并根据该矩阵对行进行排序:
aug_size = [3 3 3]; % augment size of each vector. Not necessarily equal
vectors_aux = arrayfun(@(a) {[false(1,U) true(1, a)]}, aug_size);
T_aux = cell(1,n);
[T_aux{:}] = ndgrid(vectors_aux{:});
T_aux = cat(n+1, T_aux{:});
T_aux = reshape(T_aux,[],n);
[~, ind] = sortrows(T_aux, n:-1:1); % indices of stably sorting the rows.
% Most significant column is rightmost, as per your code
Tcoord_augmented_reorder = Tcoord_augmented(ind, :);
那个代码看起来很熟悉…真的很熟悉,不是吗?