我认为我在将递归聚类算法的结果存储为嵌套元组时很聪明。数据存储ID之间的所有关系,如下所示:
((((((((8953L, 3409L), (8334L, 7375L)), ((7375L, 7220L), (8420L, 8556L))), (((7375L, 7220L), (8420L, 8556L)), ((8420L, 8556L), (8556L, 10089L)))), ((((11021L, 11462L), (6778L, 6854L)), ((10691L, 6652L), (11061L, 11230L))), (((6652L, 5660L), (10691L, 6652L)), ((8390L, 6032L), (10984L, 11061L))))), (((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L)))), ((((8667L, 9142L), (6491L, 7771L)), ((10391L, 8808L), (8667L, 9142L))), (((10391L, 8808L), (8667L, 9142L)), ((5882L, 9575L), (7008L, 6048L)))))), ((((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L))))), (((((11266L, 11269L), (10751L, 12192L)), ((6905L, 8811L), (11180L, 9732L))), (((12338L, 12701L), (12474L, 12569L)), ((9948L, 10073L), (8577L, 10217L)))),
((((8997L, 11091L), (11091L, 11210L)), ((10751L, 12192L), (12543L, 12143L))), (((961L, 12029L), (9262L, 11900L)), ((3825L, 7779L), (10500L, 11781L))))))), (((((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L)))), ((((11248L, 12034L), (9972L, 11248L)), ((10948L, 12013L), (10823L, 5602L))), (((10839L, 10948L), (6673L, 10839L)), ((10729L, 9687L), (1300L, 12274L))))), (((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))),
(((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L)))))), ((((((11162L, 9208L), (6992L, 5965L)), ((9208L, 11317L), (10834L, 11318L))), (((12705L, 12769L), (3825L, 7779L)), ((12334L, 12414L), (12769L, 7059L)))), ((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L))))), (((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L)))), ((((11248L, 12034L), (9972L, 11248L)), ((10948L, 12013L), (10823L, 5602L))), (((10839L, 10948L), (6673L, 10839L)), ((10729L, 9687L), (1300L, 12274L)))))))), ((((((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L)))), ((((9380L, 7698L), (6450L, 8876L)), ((9386L, 8168L), (8876L, 7622L))), (((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))))), (((((9225L, 9777L), (6895L, 8167L)), ((10686L, 5395L), (12384L, 6816L))), (((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L)))), ((((9175L, 7918L), (6780L, 8004L)), ((6780L, 8004L), (10831L, 9175L))), (((6908L, 11020L), (10419L, 10235L)), ((11200L, 9756L), (11021L, 11462L)))))),
((((((10031L, 8445L), (6165L, 8329L)), ((8445L, 12689L), (10031L, 8445L))), (((5350L, 6189L), (7374L, 5782L)), ((8355L, 7054L), (6536L, 9380L)))), ((((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L))), (((8355L, 7054L), (6536L, 9380L)), ((9380L, 7698L), (6450L, 8876L))))), (((((7613L, 11184L), (11184L, 5673L)), ((8929L, 5318L), (8378L, 8929L))), (((10419L, 10235L), (6377L, 6439L)), ((8378L, 8929L), (5363L, 5910L)))), ((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L))))))), (((((((8953L, 3409L), (8334L, 7375L)), ((7375L, 7220L), (8420L, 8556L))), (((7375L, 7220L), (8420L, 8556L)), ((8420L, 8556L), (8556L, 10089L)))), ((((11021L, 11462L), (6778L, 6854L)), ((10691L, 6652L), (11061L, 11230L))), (((6652L, 5660L), (10691L, 6652L)), ((8390L, 6032L), (10984L, 11061L))))), (((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L)))),
((((8667L, 9142L), (6491L, 7771L)), ((10391L, 8808L), (8667L, 9142L))), (((10391L, 8808L), (8667L, 9142L)), ((5882L, 9575L), (7008L, 6048L)))))), ((((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L))))), (((((11266L, 11269L), (10751L, 12192L)), ((6905L, 8811L), (11180L, 9732L))), (((12338L, 12701L), (12474L, 12569L)), ((9948L, 10073L), (8577L, 10217L)))),
((((8997L, 11091L), (11091L, 11210L)), ((10751L, 12192L), (12543L, 12143L))), (((961L, 12029L), (9262L, 11900L)), ((3825L, 7779L), (10500L, 11781L))))))))
我现在正试图将这个对象转换成一个边列表,以便用networkx可视化。所以每对ID都很容易连接——比如10500和11781。但是我还需要将每个嵌套连接到其父节点,所以(10500和11781)每个都需要一个到上层节点的边连接,该节点分支到该对和(38257779)。我是不是做错了?在
我找到的最好的模板是用来展平任何数据结构的。它至少有一些我理解的关于遍历对象的逻辑:
^{pr2}$为了澄清这一点,每个上层都有一个由以前的层组成的ID。以下是6个级别,例如:
((((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L)))), ((((9380L, 7698L), (6450L, 8876L)), ((9386L, 8168L), (8876L, 7622L))), (((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))))), (((((9225L, 9777L), (6895L, 8167L)), ((10686L, 5395L), (12384L, 6816L))), (((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L)))), ((((9175L, 7918L), (6780L, 8004L)), ((6780L, 8004L), (10831L, 9175L))), (((6908L, 11020L), (10419L, 10235L)), ((11200L, 9756L), (11021L, 11462L))))))
(((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L)))), ((((9380L, 7698L), (6450L, 8876L)), ((9386L, 8168L), (8876L, 7622L))), (((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L)))))
((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L))))
(((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L)))
((9386L, 8168L), (8876L, 7622L))
(9386L, 8168L)
9386L
用这个小递归遍历器生成:
def pluck(data_in,out):
if not isinstance(data_in[0], tuple):
return out
print data_in[0]
out.append(data_in[0])
pluck(data_in[0],out)
这样就清楚了吗?我不想要一个简单的列表-我是一个像树分形一样的连接成员的列表。建议?在
更新 有个好人发布了一个有用的函数,但它现在不见了,所以我重新发布了。好的部分是它将所有元组推送到一个元组列表中。糟糕的是networkx仍然无法连接最终映射中的所有成员:
def flatten(t, out):
if isinstance(t[0], tuple):
for p in t:
flatten(p, out)
else:
out.append(t)
return out
out = []
out = flatten(data,out)
这里有一个类似于@Bula的方法,但是它使用元组作为树中的“内部节点”。你可以随意重新贴标签。我没有画任何标签,所以你不会在这里看到它们。在
相关问题 更多 >
编程相关推荐