小智..

11

我有这个问题,因为这个问题是5年,我不得不重做所有的基准测试并改变瓶颈的语法(现在已经没有partsort了,partition现在已经是这样了).

我使用与kwgoodman相同的参数,除了检索的元素数量,我增加到50(为了更好地适应我的特定情况).

我得到了这些结果:

bottleneck 1: 01.12 ms per loop

bottleneck 2: 00.95 ms per loop

pandas : 01.65 ms per loop

heapq : 08.61 ms per loop

numpy : 12.37 ms per loop

numpy 2 : 00.95 ms per loop

因此,瓶颈_2和numpy_2(adas的解决方案)是并列的.但是,使用np.percentile(numpy_2)你已经排序了那些topN元素,而其他解决方案则不然.另一方面,如果您对这些元素的索引感兴趣,百分位数也没用.

我也添加了pandas,它使用了下面的瓶颈(如果有的话)(http://pandas.pydata.org/pandas-docs/stable/install.html#recommended-dependencies).如果你已经开始使用pandas系列或DataFrame,那么你就掌握得很好,只需使用nlargest就可以了.

用于基准测试的代码如下(请参阅python 3):

import time

import numpy as np

import bottleneck as bn

import pandas as pd

import heapq

def bottleneck_1(a, n):

return -bn.partition(-a, n)[:n]

def bottleneck_2(a, n):

return bn.partition(a, a.size-n)[-n:]

def numpy(a, n):

return a[a.argsort()[-n:]]

def numpy_2(a, n):

M = a.shape[0]

perc = (np.arange(M-n,M)+1.0)/M*100

return np.percentile(a,perc)

def pandas(a, n):

return pd.Series(a).nlargest(n)

def hpq(a, n):

return heapq.nlargest(n, a)

def do_nothing(a, n):

return a[:n]

def benchmark(func, size=1000000, ntimes=100, topn=50):

t1 = time.time()

for n in range(ntimes):

a = np.random.rand(size)

func(a, topn)

t2 = time.time()

ms_per_loop = 1000000 * (t2 - t1) / size

return ms_per_loop

t1 = benchmark(bottleneck_1)

t2 = benchmark(bottleneck_2)

t3 = benchmark(pandas)

t4 = benchmark(hpq)

t5 = benchmark(numpy)

t6 = benchmark(numpy_2)

t0 = benchmark(do_nothing)

print("bottleneck 1: {:05.2f} ms per loop".format(t1 - t0))

print("bottleneck 2: {:05.2f} ms per loop".format(t2 - t0))

print("pandas : {:05.2f} ms per loop".format(t3 - t0))

print("heapq : {:05.2f} ms per loop".format(t4 - t0))

print("numpy : {:05.2f} ms per loop".format(t5 - t0))

print("numpy 2 : {:05.2f} ms per loop".format(t6 - t0))

查找python矩阵中最大元素_一种快速查找numpy数组中最大N个元素的方法相关推荐

  1. python中存储坐标_最好使用元组或numpy数组来存储坐标

    在内存消耗方面,numpy数组比Python元组更紧凑. numpy数组使用一个连续的内存块.numpy数组的所有元素必须是声明的类型(例如32位或64位float).Python tuple不一定使 ...

  2. 找出数组中被其他元素整除的元素_「每日一题」数组中重复的数字

    题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次.请找出数组中任意一个重复的数字. Input ...

  3. python numpy 子数组_Python快速转换numpy数组中Nan和Inf的方法实例说明

    在使用numpy数组的过程中时常会出现nan或者inf的元素,可能会造成数值计算时的一些错误.这里提供一个numpy库函数的用法,使nan和inf能够最简单地转换成相应的数值. 转载:https:// ...

  4. python矩阵乘法 点乘_转(matlab和numpy矩阵乘法异同)

    广义的矩阵的矩阵乘法包括:矩阵相乘,矩阵点乘,向量乘法与向量点乘,内积. 对应的MATLAB有[* , .* , dot]三种运算符.分别表示的相乘,点乘和内积. 而在numpy中呢,也有*和dot两 ...

  5. python数组每个元素加1_python-根据键转换numpy数组中的每个元素

    我认为最好遍历字典,并"一次"在所有行和列中设置值: >>> a = np.array([[1,2,3],[3,2,1]]) >>> a arr ...

  6. c++中recvfrom函数_通俗易懂:快速理解网络编程中5种IO模型

    关于IO模型,就必须先谈到几个日常接触的几个与IO相关名字:同步,异步,阻塞,非阻塞. 名词解释 同步 如果事件A需要等待事件B的完成才能完成,这种串行执行机制可以说是同步的,这是一种可靠的任务序列, ...

  7. python矩阵中找满足条件的元素_从numpy数组中取出满足条件的元素示例

    例如问题:从 arr 数组中提取所有奇数元素. input:arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) output: #> array([1, ...

  8. python取出数组大于某值_Python替换NumPy数组中大于某个值的所有元素实例

    我有一个2D(二维) NumPy数组,并希望用255.0替换大于或等于阈值T的所有值.据我所知,最基础的方法是: shape = arr.shape result = np.zeros(shape) ...

  9. 34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标

    34. 在排序数组中查找元素的第一个和最后一个位置 难度中等2012 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target.请你找出给定目标值在数组中的开始位置和结束位置. 如果 ...

  10. python数组长度查询_python – 在numpy数组中查找相同值的序列长度(运行长度编码)...

    在pylab程序中(也可能是一个matlab程序)我有一个代表距离的numpy数组:d [t]是时间t的距离(我的数据的时间跨度是len(d)时间单位) . 我感兴趣的事件是当距离低于某个阈值时,我想 ...

最新文章

  1. C#下载远程文件到本地
  2. list乘法复制带来的坑
  3. 【EasyUI】EasyUI学习笔记
  4. Net-snmp开发流程:MG-SOFT套件生成C语言snmp set/get代码
  5. 日期插件My97DatePicker
  6. 我开着超市,不好好做自己的生意,每天却为社区团购平台打工
  7. 中如何构造有参和无惨_导数中构造函数的神力你应该借助一下
  8. 用Intel线程构建块进行安全、可伸缩性的并行编程
  9. SSM SpringBoot vue教务排课系统
  10. WPS通过宏工具批量修改图片尺寸
  11. 用java编写英寸到厘米的转换_像素、英寸、厘米的换算 - flyinglife - JavaEye技术网站...
  12. 斩获GitHub 2000+ Star,阿里云开源的Alink机器学习平台如何跑赢双11数据“博弈”?...
  13. 【工具】C盘垃圾自动清理软件
  14. 什么是ISO镜像文件,为什么不能拷贝到U盘直接重新安装?
  15. js中yyyy-MM-dd格式的日期转换
  16. JVM vs DVM
  17. UHF超高频RFID通信协议实验步骤
  18. 奥鹏西交计算机应用基础在线作业,20秋西交《计算机应用基础》在线作业【答案】...
  19. java读取csv文件的两种方式
  20. 好看的代码,千篇一律!难看的代码,卧槽卧槽~

热门文章

  1. 自定义标签之使用struts的valueStack取值
  2. MySQL 效能监控工具--mysqlreport -转
  3. 安装微软虚拟机的操作说明
  4. r语言初学者指南_由R入统:R语言统计学类书籍推荐
  5. 中班音乐活动 机器人_幼儿园大班音乐活动教案:《机器人》
  6. 捕捉异常_Python通过try....except...else捕捉和处理异常
  7. 属性子集选择的基本启发方法_2017.06.29数据挖掘基础概念第二.三章
  8. java编写api取数据_Java 8 API 示例:字符串、数值、算术和文件
  9. win开启审计功能_一项一项教你测等保2.0——Linux安全审计
  10. 自定义docker nginx镜像无容器日志输出