gpt4 book ai didi

python - 将元组字典转换为 numpy 矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:21 26 4
gpt4 key购买 nike

我有一个非常大的字典,其中包含元组作为键及其值。这本词典应该表示一个带有单词共现向量的邻接矩阵,例如“工作”与“经验”一起出现 16 次,“工作”与“服务”一起出现 15 次。这是否是首选的存储方法是另一个问题(由于我拥有大量数据,嵌套字典成为遍历的噩梦),但这只是我现在所拥有的。

Frequency:{ 
('work', 'experience'): 16,
('work', 'services'): 25,
('must', 'services'): 15,
('data', 'services'): 10,
...
...}

感谢之前的一篇文章,我已经能够使用 NetworkX 做一个简单的二进制邻接矩阵,只需使用这种方法:

A=Frequency.keys()
networkx.Graph(A)

那个结果很好,但我的问题是我必须做些什么才能将 Frequency 转换为邻接矩阵,使用它的共现值作为矩阵中的值,以便结果看起来像这几行:

array([[ 0.,  16.,  25.,  0.],
[ 16., 0., 1., 0.],
[ 25., 1., 0., 1.],
[ 10., 0., 0., 0.]
...)

如果这与以前的帖子相似,我深表歉意,但我就是找不到将这些元组转换为可在 NetworkX 中使用的矩阵的正确方法。我假设我会使用 numpy,但我找不到此类方法的任何文档。

提前致谢

罗恩

最佳答案

This answer可能有帮助。使用您的示例数据:

>>> frequency = {('work', 'experience'): 16, 
... ('work', 'services'): 25,
... ('must', 'services'): 15,
... ('data', 'services'): 10}
>>> keys = np.array(frequency.keys())
>>> vals = np.array(frequency.values())
>>> keys
array([['work', 'services'],
['must', 'services'],
['work', 'experience'],
['data', 'services']],
dtype='|S10')
>>> vals
array([25, 15, 16, 10])
>>> unq_keys, key_idx = np.unique(keys, return_inverse=True)
>>> key_idx = key_idx.reshape(-1, 2)
>>> unq_keys
array(['data', 'experience', 'must', 'services', 'work'],
dtype='|S10')
>>> key_idx
array([[4, 3],
[2, 3],
[4, 1],
[0, 3]])
>>> n = len(unq_keys)
>>> adj = np.zeros((n, n) ,dtype=vals.dtype)
>>> adj[key_idx[:,0], key_idx[: ,1]] = vals
>>> adj
array([[ 0, 0, 0, 10, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 15, 0],
[ 0, 0, 0, 0, 0],
[ 0, 16, 0, 25, 0]])
>>> adj += adj.T
>>> adj
array([[ 0, 0, 0, 10, 0],
[ 0, 0, 0, 0, 16],
[ 0, 0, 0, 15, 0],
[10, 0, 15, 0, 25],
[ 0, 16, 0, 25, 0]])

关于python - 将元组字典转换为 numpy 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21446323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com