我使用熊猫创建了一个共现矩阵,如下所示。
import pandas as pd
import numpy as np
lst = [
['a', 'b'],
['b', 'c', 'd', 'e', 'e'],
['a', 'd', 'e'],
['b', 'e']
]
u = (pd.get_dummies(pd.DataFrame(lst), prefix='', prefix_sep='')
.groupby(level=0, axis=1)
.sum())
v = u.T.dot(u)
v.values[(np.r_[:len(v)], ) * 2] = 0
print(v)
输出如下。
a b c d e
a 0 1 0 1 1
b 1 0 1 1 3
c 0 1 0 1 2
d 1 1 1 0 3
e 1 3 2 3 0
我想将上述数据帧转换为(x,y)对。如您所见,输出矩阵是对称的(即对角线的上部和对角线的下部相似)。因此,我很高兴只从其中一部分中获得(x,y)对(例如,仅使用上部)。
因此,在上面的矩阵中,输出应该是(即(x,y)对,其值大于零>0
)
[('a','b'), ('a', 'd'), ('a','e'), ('b', 'c'), ('b', 'd'), ('b', 'e'),
('c', 'd'), ('c', 'e'), ('d', 'e')]
是否可以在熊猫中执行此操作?
很高兴在需要时提供更多详细信息。
答案 0 :(得分:5)
您可以尝试np.where:
PATH
然后您可以过滤列表:
arr = np.where(v>=1)
corrs = [(v.index[x], v.columns[y]) for x, y in zip(*arr)]
corrs
[('a', 'b'),
('a', 'd'),
('a', 'e'),
('b', 'a'),
('b', 'c'),
('b', 'd'),
('b', 'e'),
('c', 'b'),
('c', 'd'),
('c', 'e'),
('d', 'a'),
('d', 'b'),
('d', 'c'),
('d', 'e'),
('e', 'a'),
('e', 'b'),
('e', 'c'),
('e', 'd')]
答案 1 :(得分:3)
这也有效:
axs = imshow(flower_tensor_image.detach().cpu().numpy(), ax = plt)
答案 2 :(得分:3)
对上三角矩阵使用numpy.triu
,通过numpy.nonzero
或numpy.where
获取索引,并通过索引创建的索引和列的最后zip
值:
i, c = np.nonzero(np.triu(v.values))
#alternative
#i, c = np.where(np.triu(v.values))
L = list(zip(v.index[i], v.columns[c]))
print (L)
[('a', 'b'),
('a', 'd'),
('a', 'e'),
('b', 'c'),
('b', 'd'),
('b', 'e'),
('c', 'd'),
('c', 'e'),
('d', 'e')]