我想在

python中实现Vantage Point Tree,但它使用C中的std :: nth_element.

所以我想在Python或numpy中找到等效的’nth_element’函数.

注意,nth_element只会对数组进行部分排序,而且它是O(N).

int the_array[10] = {4,5,7,3,6,0,1,2,9,8};

std::vector the_v(the_array,the_array+10);

std::nth_element (the_v.begin()+0, the_v.begin()+5, the_v.begin()+10);

现在矢量可能是:

3,0,2,1,4,5,6,7,9,8

而且我不仅希望得到第n个元素,而且还希望重新安排列表的两部分,[3,0,2,1,4]和[6,7,9,8].

此外,nth_element支持接受一个可以比较两个元素的函数,例如,在下面,vector是一个向量op DataPoint,而DistanceComparator函数将比较两个点距离与_v.begin():

vector the_v;

for(int n = 0; n < N; n++) the_v[n] = DataPoint(D, n, X + n * D);

std::nth_element (the_v.begin()+0, the_v.begin()+5, the_v.begin()+10,

DistanceComparator(the_v.begin()));

编辑:

我已经使用了bhuvan-venkatesh的答案,并编写了一些代码来测试.

partition_timer = timeit.Timer("numpy.partition(a, 10000)",

"import numpy;numpy.random.seed(2);"+

"a = numpy.random.rand(10000000)")

print(partition_timer.timeit(10))

sort_timer = timeit.Timer("numpy.sort(a)",

"import numpy;numpy.random.seed(2);"+

"a = numpy.random.rand(10000000)")

print(sort_timer.timeit(10))

sorted_timer = timeit.Timer("sorted(a)",

"import numpy;numpy.random.seed(2);"+

"a = numpy.random.rand(10000000)")

print(sorted_timer.timeit(10))

结果:

2.2217168808

17.0386350155

281.301710844

然后,我将使用C代码进行更多测试.

但是有一个问题,当使用numpy时,它总会返回一个新数组,当我的数组很大时会浪费大量内存.

我该怎么办呢

或者我只需为python编写C扩展.

EDIT2:

@ bhuvan-venkatesh感谢您推荐分区功能.

我使用如下的分区:

import numpy

@profile

def for_numpy():

numpy.random.seed(2)

a = numpy.random.rand(1e7)

for i in range(100):

a.partition(numpy.random.randint(1e6))

if __name__ == '__main__':

for_numpy()

并运行探查器,如:

python -m memory_profiler profiler_test.py

结果是:

Line # Mem usage Increment Line Contents

================================================

25 23.613 MiB 0.000 MiB @profile

26 def for_numpy():

27 23.613 MiB 0.000 MiB numpy.random.seed(2)

28 99.934 MiB 76.320 MiB a = numpy.random.rand(1e7)

29 100.004 MiB 0.070 MiB for i in range(100):

30 100.004 MiB 0.000 MiB a.partition(numpy.random.randint(1e6))

并且它不会复制整个数组,如:

numpy.partition(a,3)

结论:numpy.ndarray.partition是我想要找到的.

python中element什么意思_什么是Python中等效的’nth_element’函数?相关推荐

  1. .Net 6.0中的新增特性_.Net 6.0中的新增功能

    .Net 6.0中的新增特性_.Net 6.0中的新增功能 一..Net 6 介绍 .NET 6 作为 LTS 长期支持版本,.NET 6 将会获得 3 年的技术支持. .NET 6 是首个原生支持 ...

  2. css如何保留空格,HTML/CSS中的空格处理_如何保留页面中的空格

    html中的空格的规则 在html中内容中的多个空格一般会被视为一个,连续的多个空格符被自动合并了.同时内容前后的空格也会被清除, 如下: fly63 com 显示效果为: fly63 com 备注: ...

  3. amp jsp空格 nps_HTML/CSS中的空格处理\_如何保留页面中的空格【转】

    HTML/CSS中的空格处理\_如何保留页面中的空格[转] HTML中的空格的规则 在html中内容中的多个空格一般会被视为一个,连续的多个空格符被自动合并了.同时内容前后的空格也会被清除, 如下: ...

  4. python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?

    越来越多的人开始学习Python,它已经成为最流行的编程语言之一,这几乎发生在所有领域.比如网络开发.科学计算,当然还有人工智能. 无论想用python干什么,都绕不开学习Python的数据结构.变量 ...

  5. python如何初始化对象数组_如何理解Python中的面向对象编程?

    (由Python大本营付费下载自视觉中国) 作者 | Radek Fabisiak 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 现如今面向对象编程的使用非常广泛,本文 ...

  6. python中for循环加速_如何让Python代码加速运行?

    Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足.但是,有很多时候,Python 的效率并没有想象中的那么夸张.本文对一些 Python 代码加速运行的技巧 ...

  7. python怎么删除特定文件_如何使用python从文件中删除特定行?

    代码是:from datetime import datetime,time from csv import reader with open('onlyOnce.txt', 'r+') as fon ...

  8. python若干整数的最大值_实例讲解Python中整数的最大值输出

    在Python中可以存储很大的值,如下面的Python示例程序: x = 10000000000000000000000000000000000000000000; x = x + 1 print ( ...

  9. python一直报缩进错误_如何避免Python中的缩进错误

    Python是当今编程界领先和新兴的编程平台之一.凭借其丰富的功能和巨大的灵活性,人们可以在这个平台上实现很多,只要他们知道如何操作它.在Python中的这个缩进错误中,我们将介 Python是当今编 ...

  10. python向数据库写入数据_如何用Python向Mysql中插入数据

    我们使用Python经常会和Postgresql进行搭配,很少将python和mysql进行搭配.下面小编给大家分享如何用Python向Mysql中插入数据. 工具/原料 Pycharm 方法/步骤 ...

最新文章

  1. RHEL6搭建本地yum源
  2. 文轩在线:如何让IT部门成为企业的价值中心
  3. 获取元素相对于屏幕的位置
  4. linux c 获取进程 可执行文件路径
  5. 写程序过程中写程序的注意事项
  6. osgEarth使用没有DX的Triton库Triton-MT-DLL-NODX.lib
  7. Android 退出应用程序
  8. 懂「互联网语」的程序员,是个狠人。
  9. PHP版_游戏扫码登录器程序源码
  10. ngnix的简单转发请求之server和location配置详解
  11. jquery根据滚动像素显示隐藏顶部导航条
  12. python 线程池使用
  13. 全球及中国晶圆锯划片刀行业发展态势及投资潜力预测报告2021-2027年
  14. wps 项目进度_wps excle做甘特图|如何利用excel自动生成施工进度计划横道图
  15. 如何写一份竞品分析报告——产品经理养成路
  16. PS去除图片白底制作微信表情包
  17. Android上Excel编辑器,Excel表格编辑器下载-Excel表格编辑器appv1.1.02 最新版-腾牛安卓网...
  18. 你们制作微信表情包都用了哪些软件?当然必备这3款
  19. 火狐浏览器打印网页不全_打印网页显示不全,求助
  20. 搜狗推送接口之搜狗秒收录技巧分享

热门文章

  1. MySQL中round函数
  2. 适合普通大学生的前端开发学习路线
  3. 使用WireShark协议分析仪来分析ICMP与FTP协议
  4. vue ES6 导入导出电话区号 export import
  5. WordPress优化教程让WordPress打开速度更快
  6. 网站小图标制作及配置
  7. 获取网页标题的小图标
  8. 汽车汽油电子喷射系统
  9. Qt QLineEdit QLabel 添加clicked事件
  10. java收费_一文看懂Java收费 附可替换方案!