我有一个矩阵 mx3 。我将提取由3行向量组成的所有可能的组。例如,来自
A = [1 2 3; 4 5 6; 7 8 9; 10 11 12];
我会得到:
v1 = [1 2 3], v2 = [4 5 6], v3 = [7 8 9]
v1 = [1 2 3], v2 = [4 5 6], v3 = [10 11 12]
v1 = [1 2 3], v2 = [7 8 9], v3 = [10 11 12]
v2 = [4 5 6], v2 = [7 8 9], v3 = [10 11 12]
此外,我需要在所有可能的矩阵(m-1)x3 上重复相同的过程。因此,在开头的示例中,我必须删除第一行,然后删除第二行,然后删除第三行,最后删除第四行。
那不是全部!我需要在所有可能的矩阵上重复这个过程(mi)x3 unitl (mi)> = 3 (在我停止的示例中)的 I = 1 )。
我知道有一个函数 nchoosek 它可以完成这项工作,但首先它很慢,最重要的是它需要创建一个包含所有可能组合的矩阵(并且它&#39 ;当起始矩阵有很多行时,s是不可容忍的,因为组合太多了。)
你能帮我解决这个奇怪的问题吗?
编辑:我需要验证矩阵的属性。要做到这一点,我必须在时间上比较3行。 我们调用维度 mx3 的矩阵 A 。如果我发现只有一个三元组不满足该属性,我将移动到 A 的子集,其中维度(m-1)x3 。请注意,在这种情况下,我有 m 可能的子集!因此,如果属性不满足一个子集,我需要使用其他子集。 如果没有 m 维度矩阵(m-1)x3 满足我的条件,我需要考虑维度(m-2)x3 的矩阵。这里开始出现问题,因为要检查的组合很多。
依此类推,直到找到最大(m-i)x3 矩阵,其中每个三元组满足该属性。