我可以在python中使用字典作为矩阵吗?

时间:2010-07-06 16:11:13

标签: python arrays

我只是python的初学者。最近我正在学习使用词典,但我对它的了解仍然有限。我有这个想法从脑子里冒出来但我不确定它是否在python中可行。

我有3个文档如下:

DOCNO= 5

nanofluids  :0.6841

introduction:0.2525

module      :0.0000

to          :0.0000

learning    :0.0000





DOCID= 1

nanofluids  :0.0000

introduction:0.2372

module      :0.0000

to          :0.0000

learning    :0.1185



DOCNO= 12

nanofluids  :0.0000

introduction:0.0000

module      :0.5647

to          :0.0000

learning    :0.2084

我知道如何在字典中存储单个值。例如:

data={5: 0.67884, 1:0.1567, 12:3455}

但我现在要做的是存储一个带有相应文档编号的数组,如下所示:


import array

data={ 5:array([0.6841,0.2525,0.0000.0000,0.0000]), 1:array([0.0000,0.2372,0.0000,0.0000,0.1185]), 12:array([0.0000,0.0000,0.5647,0.0000,0.2084])} 

*我的python v2.6.5似乎不允许我这样做。*


如果假设上述操作有效,我想执行点积或矩阵乘积来找出文档对之间的相似性。我的想法是将数组排列在3x5矩阵中并乘以5x3的转置。这将返回一个3x3矩阵,告诉我两个文档之间的关系。例如:

[ 5:[0.6841,0.2525,0.0000,0.0000,0.0000],

1:[0.0000, 0.2372,0.0000,0.0000,0.1185],

12:[0.0000,0.0000,0.5647,0.0000,0.2084] ]

并乘以它的转置(我不知道该怎么做),结果将是3x3矩阵,与“DOCNO”对应“DOCNO”。

底线是我需要能够检索DOCNO。例如(5,1)显示了文档5和1之间的关系。或者(1,12)显示了文档1和12之间的关系。我不确定这是否可以在python中使用,但是其他类似的解决方案将不胜感激。谢谢你的时间。

2 个答案:

答案 0 :(得分:3)

首先,您应该查看Python documentation for arrays。您的示例代码有三个问题:

  • 您已导入数组模块,但未导入数组类。试试这个:

    from array import array

  • 您的列表中有0.0000.0000个浮点数。

  • array有两个论点;一个typecode和初始化值。将您的array([...])来电更改为array('f', [...])来电,它应该有效。

但事实是,Python并没有很多内置的基本工具(你总是可以编写自己的工具)。如果您正在进行矩阵代数,则应该使用NumPy

它可以处理arraysmatrices以及所有相关的转换。

答案 1 :(得分:0)

要修复您的数据分配,请尝试以下操作:

from array import array

data={ 5:array('d',[0.6841,0.2525,0.0000,0.0000,0.0000]), 1:array('d',[0.0000,0.2372,0.0000,0.0000,0.1185]), 12:array('d',[0.0000,0.0000,0.5647,0.0000,0.2084])}

这样或那样我会使用NumPy进行其余的计算。

相关问题