python – 如何从下面的向量中获取具有最高值的5个元组?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何从下面的向量中获取具有最高值的5个元组?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2956字,纯文字阅读大概需要5分钟。
内容图文
我正在使用gensim进行实验.我正在使用lda模型来获得一个概率向量,如下所示:
[(0, 0.01666666666666804), (1, 0.01666666666666982), (2, 0.01666666666667857),
(3, 0.016666666666667104), (4, 0.016666666666668519), (5, 0.01666666666666838),
(6, 0.016666666666681464), (7, 0.016666666666669494), (8, 0.016666666666669269),
(9, 0.016666666666667069), (10, 0.016666666668398125), (11, 0.016666666666666666),
(12, 0.51666666666481131), (13, 0.01666666666668485), (14, 0.01666666666666948),
(15, 0.016666666666667097), (16, 0.016666666666666666), (17, 0.016666666666666767),
(18, 0.016666666666667922), (19, 0.016666666666678695), (20, 0.016666666666667683),
(21, 0.016666666666677307), (22, 0.016666666666669522), (23, 0.016666666666675913),
(24, 0.016666666666670923), (25, 0.016666666666667409), (26, 0.016666666666680405),
(27, 0.016666666666666666), (28, 0.0166666666666705), (29, 0.016666666666668353)]
它是由元组组成的列表,元组的第一个组成部分是主题,第二个是概率:
(topic, probability)
我想在元组列表中获得具有最高概率的5个主题,如下所示:
max = [(topicN, probability),...]
我尝试首先在numpy结构中转换这个元组,如下所示:
vector = lda[ques_vec]
print(vector)
types = numpy.dtype('int,float')
data = numpy.array(vector,dtype=types)
print(data)
但是我不知道如何命令这个结构来获得具有最高概率的五个元组的列表,所以我想感谢支持.
解决方法:
内置的heapq模块包含一个nlargest函数:
from heapq import nlargest
from operator import itemgetter
>>> nlargest(5, vector, key=itemgetter(1)) # get the 5 largest values based on the second item in each tuple
[(12, 0.5166666666648113), (10, 0.016666666668398125), (13, 0.01666666666668485), (6, 0.016666666666681464), (26, 0.016666666666680405)]
或者您可以使用带切片的反向排序:
>>> sorted(vec, key=itemgetter(1), reverse=True)[:5]
[(12, 0.5166666666648113), (10, 0.016666666668398125), (13, 0.01666666666668485), (6, 0.016666666666681464), (26, 0.016666666666680405)]
然而,这两种方法都不需要numpy.
它也可以使用numpy,但是我能提出的方法需要一些中间步骤:
>>> types = np.dtype('int, float')
>>> data = np.array(vector, dtype=types)
>>> np.sort(data, order='f1')[-5:][::-1]
array([(12, 0.5166666666648113), (10, 0.016666666668398125),
(13, 0.01666666666668485), (6, 0.016666666666681464),
(26, 0.016666666666680405)],
dtype=[('f0', '<i4'), ('f1', '<f8')])
这使用np.sort基于第二列(order =’f1′),然后取5个最后项(numpy仅支持从低到高的排序)[ – 5:]并最终反转其余项目[[ – – 1] ).
np.sort注意事项:默认情况下,它使用非稳定的排序算法(Quicksort).因此,如果您期望几个具有相同概率的值,您可能需要稳定排序,那么您应该指定kind =’mergesort’.
还有另一种使用numpy的方法,不需要完全排序:np.partition:
>>> types = np.dtype('int, float')
>>> data = np.array(vector, dtype=types)
>>> np.partition(data, -5, order='f1')[-5:][::-1]
array([(12, 0.5166666666648113), (10, 0.016666666668398125),
(13, 0.01666666666668485), (6, 0.016666666666681464),
(26, 0.016666666666680405)],
dtype=[('f0', '<i4'), ('f1', '<f8')])
然而,分区支持没有稳定的算法,所以它可能更快,但它的灵活性更低.
内容总结
以上是互联网集市为您收集整理的python – 如何从下面的向量中获取具有最高值的5个元组?全部内容,希望文章能够帮你解决python – 如何从下面的向量中获取具有最高值的5个元组?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。