非数字元组的邻接矩阵

时间:2014-01-21 00:55:50

标签: python matrix tuples adjacency-matrix

我有一个共同格式的大量项目词典。基本上,条件词向量。 简化字典看起来像这样:

reservoir ={
 ('a', 'b'): 2,
 ('a', 'c'): 3,
 ('b', 'a'): 1,
 ('b', 'c'): 3,
 ('c', 'a'): 1,
 ('c', 'b'): 2,
 ('c', 'd'): 5,             ,
}

为了存储,我已经决定,如果没有共存,那么根本不存储信息,即:a和b从不出现在d的事实,因此我做没有与任何一点相关的任何信息。

我试图获得的结果是,对于每个元组,key1 = x和key2 = y,因此在矩阵中它将如下所示:

  a b c d
a 0 2 3 0
b 1 0 3 0
c 1 2 0 5
d 0 0 0 0

我在这篇文章中找到了相关信息:Adjacency List and Adjacency Matrix in Python,但这并不是我想做的事情。到目前为止,我所有的尝试都证明不那么有成效。任何帮助都会很棒。

再次感谢,

1 个答案:

答案 0 :(得分:3)

你真的只需要获取行和列的标签。从那里开始,只有几个for循环:

from __future__ import print_function

import itertools

reservoir = {
    ('a', 'b'): 2,
    ('a', 'c'): 3,
    ('b', 'a'): 1,
    ('b', 'c'): 3,
    ('c', 'a'): 1,
    ('c', 'b'): 2,
    ('c', 'd'): 5
}

fields = sorted(list(set(itertools.chain.from_iterable(reservoir))))

print(' ', *fields)

for row in fields:
    print(row, end=' ')

    for column in fields:
        print(reservoir.get((row, column), 0), end=' ')

    print()

当细胞得到多个数字时,你的桌子会变得难看,所以我会留给你弄清楚。在打印之前,您只需要找到每列的最大字段长度。