【发布时间】:2013-10-10 00:20:52
【问题描述】:
我有一本这种格式的字典
items = {"0":'lorem ipsum', "1":'blah blah', "2":'blah", "3":'lorem',.....}
假设len(items) = 70
我有一个 70x70 矩阵,其中包含每对字典的值。例如,matrix[4][20] 表示字典中第 4 项和第 20 项之间的值。
我想对字典项进行聚类,并将所有值超过某个阈值的项放在同一个组中。我不知道我的方法是不是最好的方法。也许有一个图书馆可以比我的更快地完成同样的事情。因为我的矩阵可能是 10000x10000。
size = range(0,len(items))
t = 1
mydict = {}
for i in size:
mylist = items[i]
size.remove(i)
for j in size:
if items[j] in lis:
pass
elif matrix[i][j] > 0.50:
mylist.append(items[j])
size.remove(j)
mydict[t] = mylist
t = t + 1
mylist = []
然后我打印所有超过 5 个项目的组。
for i in mydict:
if len(mydict[i]) > 5:
print mydict[i]
print ""
您是否发现任何错误?知道任何库或更好的算法来做到这一点吗?
更新 这是一个更好的例子:
items = {"0": 'item 0', "1":'item 1', "2":'item 2', "3":'item 3', "4":'item 4', "5":'item 5'}
matrix = [[1.0 0.2 0.7 0.8 0.3 0.1],
[0.2 1.0 0.2 0.3 0.6 0.2],
[0.7 0.2 1.0 0.7 0.2 0.3],
[0.8 0.3 0.7 1.0 0.2 0.4],
[0.3 0.6 0.2 0.2 1.0 0.1],
[0.1 0.2 0.3 0.4 0.1 1.0]]
**The results:**
[item 0, item 2, item 3]
[item 1, item 4]
[item 5]
矩阵是三角形的,对角线上的所有点都是1。
【问题讨论】:
-
您能否提供一个传入字典和所需结果的说明性示例?
-
传入的字典与示例相同,但值不同。关键是一个从 0 到 len(items) 的 int。现在的输出是每个组的列表。我将尝试使用 dic、矩阵和结果创建一个示例
-
@J0HN 我用一个例子更新了这个问题。
-
矩阵是对字典或只是输入/配置参数的一些计算的产物?
-
是字典的值的文本相似度。