gpt4 book ai didi

python - python中的反向排序和argsort

转载 作者:太空狗 更新时间:2023-10-29 17:19:48 26 4
gpt4 key购买 nike

我正在尝试用 Python 编写一个函数(仍然是菜鸟!),它返回按 tfidf 分数的内积排序的文档的索引和分数。程序是:

  • 计算 doc idx 之间的内积向量和所有其他文件
  • 降序排列
  • 返回从第二个到最后的“分数”和索引(即不是它本身)

我现在的代码是:

import h5py
import numpy as np

def get_related(tfidf, idx) :
''' return the top documents '''

# calculate inner product
v = np.inner(tfidf, tfidf[idx].transpose())

# sort
vs = np.sort(v.toarray(), axis=0)[::-1]
scores = vs[1:,]

# sort indices
vi = np.argsort(v.toarray(), axis=0)[::-1]
idxs = vi[1:,]

return (scores, idxs)

哪里tfidfsparse matrix of type '<type 'numpy.float64'>' .

这似乎效率低下,因为排序执行了两次( sort() 然后是 argsort() ),然后必须反转结果。

  • 可以更有效地完成这项工作吗?
  • 这是否可以在不使用 toarray() 转换稀疏矩阵的情况下完成? ?

最佳答案

我认为没有必要跳过toarrayv 数组只有 n_docs 长,与 n_docs × n_terms tf- 的大小相比相形见绌实际情况下的 idf 矩阵。此外,它将非常密集,因为两个文档共享的任何术语都会使它们具有非零相似性。稀疏矩阵表示只有在您存储的矩阵非常稀疏时才有用(我已经看到 >80% 的 Matlab 数据并假设 Scipy 将是相似的,尽管我没有确切的图)。

双重排序可以跳过

v = v.toarray()
vi = np.argsort(v, axis=0)[::-1]
vs = v[vi]

顺便说一句,您在稀疏矩阵上使用 np.inner 不适用于最新版本的 NumPy;对两个稀疏矩阵进行内积的安全方法是

v = (tfidf * tfidf[idx, :]).transpose()

关于python - python中的反向排序和argsort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445323/

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