Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从Matlab中的n个向量创建所有可能的n元组,并以特定方式排序_Arrays_Matlab_Matrix - Fatal编程技术网

Arrays 从Matlab中的n个向量创建所有可能的n元组,并以特定方式排序

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}是第二行向量,

考虑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}
是最后一行向量

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, :);

那个代码看起来很熟悉…真的很熟悉,不是吗?