我有两种类型的数据,X和Y。X中的每个x都与一定数量的Y相关联,Y中的每个y都可能与某些Xs相关或不相关。
X不与其他X关联,Y不与其他Y关联。所以情况看起来像这样:
左侧为Xs,右侧为Ys。
当我只有一种类型的数据时,我知道如何查找图的连接组件:创建一个N×N矩阵并对其进行调用graphconncomp
。当我有两种类型的数据时,如何查找所有连接的组件?
如何将图的亲和力矩阵构造为稀疏矩阵:
G = sparse( length(X)+length(Y), length(X)+length(Y) );
这将创建一个大小为|X|+|Y|
-by-的“全零”稀疏矩阵|X|+|Y|
。
如果您输入
>> whos G
您会看到,尽管事实上G
有大约50K ^ 2的内存,但几乎不需要占用任何内存。
现在,所有你要做的就是用你的函数来设置1的相应节点之间X
和Y
,然后你就可以运行graphconncomp
在G
要为二部图构造一个邻接矩阵,您可以(最初)使用一个更小的(仍然稀疏)B
的size- |X|
by-矩阵|Y|
。让x=length(X)
和y=length(Y)
,然后
B = sparse( x, y ); % if you have an estimate of the number of edges, you can preallocate here
如果节点连接到节点,则该条目B( ix, jy )
设置为。一旦完成构建,就可以使用它来简单地通过1
X(ix)
Y(jy)
B
G
G = [ sparse( x, x ), B; B.', sparse(y, y)];
请注意,我不用于zeros
创建全零的矩阵,但是sparse
构造会节省内存。
现在,您可以运行graphconncomp
上G
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句