首页 > 解决方案 > 用于迭代选择矩阵列的 Octave 或 Matlab 代码

问题描述

我有一个A由 4 列C1C2和组成C3的矩阵C4。我想拥有可以从矩阵生成的所有矩阵(向量),A而无需重复列,并且列的顺序无关紧要,即 matrix B = [C1 C2] = [C2 C1]。更准确地说,我想获得以下矩阵/向量:[C1]; [C2]; [C3]; [C4]; [C1 C2]; [C1 C3]; [C1 C4]; [C2 C3]; [C2 C4 ]; [C3 C4]; [C1 C2 C3]; [C1 C2 C4]; [C1 C3 C4]; [C2 C3 C4]; [C1 C2 C3 C4].

我怎样才能在八度音阶中做到这一点?

标签: arraysmatrixoctave

解决方案


这是使用逻辑索引和 arrayfun 执行此操作的 MATLAB 代码:

n = size(A,2); % number of columns
x = logical(dec2bin(1:2^n-1)-'0'); % logical array of all possible combinations
C = arrayfun(@(k)A(:,x(k,:)),1:size(x,1),'uni',false); % build the combinations

结果将在元胞数组 C 中。基本上,dec2bin 结果的每一行都用于对 A 的列进行逻辑索引。请注意,此方法仅适用于相对较小的 n 值。对于较大的 n,内存需求很快就会变得不堪重负。


推荐阅读