从矩阵中提取“combvec”的结果,并反过来“combvec”

时间:2017-07-30 15:37:18

标签: matlab matrix

我正在研究组合问题。

鉴于 A m1 xn 矩阵, C 是每个单元格的 m2 xn 单元格数组包含行向量。

问题陈述

我想,但我不知道如何构建一个函数 C = vecfactor(A),以便所有(所有(sortrows(A,1:n)) == sortrows(B,1:n)))== 1 其中 B

构建
B = [];

for J = 1 : m2
    newmat = combvec(cell2mat(C(J,1)),cell2mat(C(J,2)),cell2mat(C(J,3)), ...
                     cell2mat(C(J,4)),cell2mat(C(J,5)));
    B = [B; transpose(newmat)];
end 

我想做的例子

如果输入 A

A =  
0 1 3 0 1
0 1 0 0 1
0 1 0 1 1
1 0 3 0 1
0 2 0 0 1
2 0 3 0 0
0 0 0 0 1
0 0 3 0 1
2 2 0 0 1
3 0 3 0 1
0 1 0 0 2

然后我希望输出 C 看起来像这样(行的顺序无关紧要):

C = 
{[1,0,3] [0] [3] [0] [1];
[0] [1,0] [3,0] [0] [1];
[0,2] [2] [0] [0] [1];
[0] [1] [0] [1] [1];
[0] [1] [0] [0] [2]}

为什么 C 看起来像这样?

的垂直连接
transpose(combvec([1,0,3],[0],[3],[0],[1]))
transpose(combvec([0],[1,0],[3,0],[0],[1]))
transpose(combvec([0,2],[2],[0],[0],[1]))
transpose(combvec([0],[1],[0],[1],[1]))
transpose(combvec([0],[1],[0],[0],[2]))
排序后,

A AND 的大小与 A 相同。

如果没有编程

我该怎么办?

这是另一方面对我的问题的另一个澄清。 这就是我尝试从手上 A 获取 C 的方式。

1)计算矩阵行 A

A =
0 1 3 0 1 --- row 1
0 1 0 0 1 --- row 2
0 1 0 1 1 --- row 3
1 0 3 0 1 --- row 4
0 2 0 0 1 --- row 5
2 0 3 0 0 --- row 6
0 0 0 0 1 --- row 7
0 0 3 0 1 --- row 8
2 2 0 0 1 --- row 9
3 0 3 0 1 --- row 10
0 1 0 0 2 --- row 11

2)找出 A 的行集,以便每个集合都是combvec的结果。

Consider the rows 4, 6, 10:
1 0 3 0 1 --- row 4
0 0 3 0 1 --- row 6
3 0 3 0 1 --- row 10

此矩阵与

的输出相同
transpose(combvec([1, 0, 3], [0], [3], [0], [1]))

所以,一行C是[1,0,3],[0],[3],[0],[1]。

Consider the rows 1, 2, 7, 8
0 1 3 0 1 --- row 1
0 1 0 0 1 --- row 2
0 0 3 0 1 --- row 7
0 0 0 0 1 --- row 8

此矩阵与

的输出相同
transpose(combvec([0], [1, 0], [3, 0], [0], [1]))

所以,另一行C是[0],[1,0],[3,0],[0],[1]。

虽然第5行也是0 _ _ 0 1的形式,但是没有办法使用combvec一次生成第1,2,5,7,8行,所以第5行不能与它们分组。

相反,第5行可以用9分组:

0 2 0 0 1 --- row 5
2 2 0 0 1 --- row 9

因为它们构成了

的输出
transpose(combvec([0, 2], [2], [0], [0], [1]))

所以,C的另一行是[0,2],[2],[0],[0],[1]。

第3行不能与其他行形成一组combvec输出。 因此,[0],[1],[0],[1],[1]形式的第3行应该是C行。

第11行和第2行一起构成

的输出
transpose(combvec([0],[1],[0],[0],[1, 2]))

但是,由于第2行已包含在另一组中,因此第11行和第2行不能组合在一起。第11行应该是单独的,形式为[0],[1 ],[0],[0],[2]也应该是一行C.

所以矩阵 A ,经过这样的计算,将返回一个单元格数组 C

C = 
{[1,0,3] [0] [3] [0] [1]; ---correspond to row 4, 6, 10 of A
[0] [1,0] [3,0] [0] [1]; ---correspond to row 1, 2, 7, 8 of A
[0,2] [2] [0] [0] [1]; ---correspond to row 5, 9 of A
[0] [1] [0] [1] [1]; ---correspond to row 3 of A
[0] [1] [0] [0] [2]} ---correspond to row 11 of A

进行转换的方法可能不止一种。但是我想要一个行数最少的输出。

上例中的输入大小仅为11 x 5,无需编程即可轻松完成。但是我需要转换的矩阵实际上是10000×10的大小,所以没有编程就很难执行它。

有人能就我如何做到这一点给我一些意见吗?

0 个答案:

没有答案