【问题标题】:Adjacency Matrix of Non-numeric tuples非数字元组的邻接矩阵
【发布时间】:2014-01-21 00:55:50
【问题描述】:

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

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,但这并不是我想要做的。到目前为止,我所有的尝试都证明没有什么成果。任何帮助都会很棒。

再次感谢,

【问题讨论】:

  • 我已经阅读了几次,但我不完全确定你在问什么。您是否要求显示这样的矩阵(我无法想象试图以友好的显示格式容纳这么多数据,除非您使用的是电子表格之类的东西)?或者你想用 Pythonic 数据结构来表示矩阵?还是你追求别的?
  • 你需要实现矩阵吗?你不能用 numpy 代替吗?
  • 回答第一个问题:我想两者都有。由于我更熟悉 R,我想在数据框中使用它来进行分析。以类似电子表格的格式显示数据只是为了证明概念。对于第二个问题:我从未将 numpy 用于任何类型的实现,但是当我试图有意识地从 R 切换到 python 时,我肯定会开始研究它。

标签: python matrix tuples adjacency-matrix


【解决方案1】:

您实际上只需要获取行和列的标签。从那里开始,它只是几个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()

当单元格超过一位时,您的表格将开始变得丑陋,所以我将把它留给您自己解决。您只需要在打印之前找到每列字段的最大长度。

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多