我尝试使用不同的节点组合生成包含4个节点的完整图形的所有可能的非冗余模式。我想得到图形模式的线性形式,例如:A-B-C-D。
complete graph pattern of 4 nodes
节点可以是重复的对象,例如E-E-E-E。现在,我想用E和R进行测试。
我尝试使用itertools.combinations_with_replacement
生成模式,我得到了5种模式:
patterns_comb = [''.join(i) for i in itertools.combinations_with_replacement(["E","R"],4)]
输出
['EEEE', 'EEER', 'EERR', 'ERRR', 'RRRR']
然后我使用itertools.product
,我得到16种模式:
patterns_product = [''.join(i) for i in itertools.product(["E","R"],repeat=4)]
输出结果为:
['EEEE', 'EEER', 'EERE', 'EERR', 'EREE', 'ERER', 'ERRE', 'ERRR', 'REEE', 'REER', 'RERE', 'RERR', 'RREE', 'RRER', 'RRRE', 'RRRR']
我使用这些模式运行下游分析。使用itertools.combinations_with_replacement
导致缺少可能很重要的模式。
但是当使用itertools.product
时,会有冗余模式,即产生类似结果的模式,因此完成下游分析需要很长时间。
例如: ERRE提供与REER相同的输出(因此两者实际上是相同的模式),并且RERE提供与ERER,EERR,RREE相同的输出。
是否有任何解决方案可以获得非冗余模式或比较这些模式以确定它们是否相似?
我尝试使用Networkx package
来比较边缘,但由于重复的节点,很难进行比较。