python - 迭代numpy矩阵并获取score gt的所有值

标签 python python-3.x numpy numpy-ndarray

我有一个公司列表(cmp_list),我使用某种自定义算法将每个值与另一个值进行比较,并得出所有分数的矩阵(分数矩阵)。如果你仔细阅读矩阵,你会看到 row1 和 col1 是 1 因为 cmp_list 中的第一项与自身匹配,类似地 row3 和 col3 是 1。现在 row1,col3 是 0 因为 cmp-list 中的第一项与第三项匹配cmp_list 中的项目,即匹配沃尔玛和家得宝,因此显然得分为 0。

我想获取cmp_list中分数> 0.5的所有项目的列表

cmp_list =    ['Walmart', 'Walmart super', 'Home Depot', 'Sears', 'Home Depot Center', 'Home Depot']

分数矩阵:

[[1.         1.         0.         0.         0.         0.        ]
 [1.         1.         0.         0.         0.         0.        ]
 [0.         0.         1.         0.         0.66666667 0.81649658]
 [0.         0.         0.         1.         0.         0.        ]
 [0.         0.         0.66666667 0.         1.         0.81649658]
 [0.         0.         0.81649658 0.         0.81649658 1.        ]]

所需输出:

cmp_list_1 = ['Walmart', 'Walmart super']
cmp_list_2 = ['Home Depot', 'Home Depot Center', 'Home Depot']

我尝试过使用嵌套 for 循环来做到这一点,但我正在寻找更 Pythonic 和简洁的东西来实现这一点:

到目前为止我的代码:

if(np.count_nonzero(score_matrix - np.diag(np.diagonal(score_matrix)))) > 0:
                rowsi, cols = np.nonzero(score_matrix)
                for it in zip(rowsi,cols):
                        if np.where(score_matrix[it[0]][it[1]] >= 0.5):

最佳答案

import numpy as np


a = score_matrix
a[np.diag_indices_from(a)] = 0
set([tuple(sorted(np.array(cmp_list)[(np.c_[[i],np.where(j>0.5)])][0]))for i,j in enumerate(a) if any(j>0.5)])

{('Home Depot', 'Home Depot', 'Home Depot Center'),
 ('Walmart', 'Walmart super')}

另一种方式:

def relation(x,dat):
    k = sorted(np.unique(np.r_[dat[1][np.in1d(dat[0],x)],x,dat[0][np.in1d(dat[1],x)]]))
    if k==x: return k
    else: return relation(k,dat)

def rel(a,cmp_list):
    a[np.diag_indices_from(a)] = 0
    mat = np.where(a>0.5)
    ind = list(np.unique(mat[0]))
    w = []
    while ind:
        k = relation([ind[0]],mat)
        w.append(list(np.array(cmp_list)[k]))
        if any(np.in1d(ind,k)):
            ind = list(np.array(ind)[~np.in1d(ind,k)])
        if len(ind)>0:
            del ind[0]
    return w

rel(score_matrix,cmp_list)
[['Walmart', 'Walmart super'],
 ['Home Depot', 'Home Depot Center', 'Home Depot']]

关于python - 迭代numpy矩阵并获取score gt的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54780474/

相关文章:

Python3 - 在不创建列表的情况下遍历 Linux 目录

python-3.x - Pandas 正则表达式提取两个不同符号前后的所有内容

python - 为什么将 DatetimeIndex 转换为 np.array 时格式会发生变化?

python - 获取数据框中的特定值

python - pyenv-virtualenv : Python and PIP not changed when activating/deactivating virtual environment 的问题

python - 格式化数值与舍入值之间的差异

python - 如何对变长特征进行热编码?

python - 如何用另一个索引字符串 Python 替换 String 的所有实例

python - invoke.context.Context 因缺少位置参数而出现奇怪的错误

python - Flask - 服务器无法启动