python中element什么意思_什么是Python中等效的’nth_element’函数?
我想在
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’函数?相关推荐
- .Net 6.0中的新增特性_.Net 6.0中的新增功能
.Net 6.0中的新增特性_.Net 6.0中的新增功能 一..Net 6 介绍 .NET 6 作为 LTS 长期支持版本,.NET 6 将会获得 3 年的技术支持. .NET 6 是首个原生支持 ...
- css如何保留空格,HTML/CSS中的空格处理_如何保留页面中的空格
html中的空格的规则 在html中内容中的多个空格一般会被视为一个,连续的多个空格符被自动合并了.同时内容前后的空格也会被清除, 如下: fly63 com 显示效果为: fly63 com 备注: ...
- amp jsp空格 nps_HTML/CSS中的空格处理\_如何保留页面中的空格【转】
HTML/CSS中的空格处理\_如何保留页面中的空格[转] HTML中的空格的规则 在html中内容中的多个空格一般会被视为一个,连续的多个空格符被自动合并了.同时内容前后的空格也会被清除, 如下: ...
- python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?
越来越多的人开始学习Python,它已经成为最流行的编程语言之一,这几乎发生在所有领域.比如网络开发.科学计算,当然还有人工智能. 无论想用python干什么,都绕不开学习Python的数据结构.变量 ...
- python如何初始化对象数组_如何理解Python中的面向对象编程?
(由Python大本营付费下载自视觉中国) 作者 | Radek Fabisiak 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 现如今面向对象编程的使用非常广泛,本文 ...
- python中for循环加速_如何让Python代码加速运行?
Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足.但是,有很多时候,Python 的效率并没有想象中的那么夸张.本文对一些 Python 代码加速运行的技巧 ...
- python怎么删除特定文件_如何使用python从文件中删除特定行?
代码是:from datetime import datetime,time from csv import reader with open('onlyOnce.txt', 'r+') as fon ...
- python若干整数的最大值_实例讲解Python中整数的最大值输出
在Python中可以存储很大的值,如下面的Python示例程序: x = 10000000000000000000000000000000000000000000; x = x + 1 print ( ...
- python一直报缩进错误_如何避免Python中的缩进错误
Python是当今编程界领先和新兴的编程平台之一.凭借其丰富的功能和巨大的灵活性,人们可以在这个平台上实现很多,只要他们知道如何操作它.在Python中的这个缩进错误中,我们将介 Python是当今编 ...
- python向数据库写入数据_如何用Python向Mysql中插入数据
我们使用Python经常会和Postgresql进行搭配,很少将python和mysql进行搭配.下面小编给大家分享如何用Python向Mysql中插入数据. 工具/原料 Pycharm 方法/步骤 ...
最新文章
- RHEL6搭建本地yum源
- 文轩在线:如何让IT部门成为企业的价值中心
- 获取元素相对于屏幕的位置
- linux c 获取进程 可执行文件路径
- 写程序过程中写程序的注意事项
- osgEarth使用没有DX的Triton库Triton-MT-DLL-NODX.lib
- Android 退出应用程序
- 懂「互联网语」的程序员,是个狠人。
- PHP版_游戏扫码登录器程序源码
- ngnix的简单转发请求之server和location配置详解
- jquery根据滚动像素显示隐藏顶部导航条
- python 线程池使用
- 全球及中国晶圆锯划片刀行业发展态势及投资潜力预测报告2021-2027年
- wps 项目进度_wps excle做甘特图|如何利用excel自动生成施工进度计划横道图
- 如何写一份竞品分析报告——产品经理养成路
- PS去除图片白底制作微信表情包
- Android上Excel编辑器,Excel表格编辑器下载-Excel表格编辑器appv1.1.02 最新版-腾牛安卓网...
- 你们制作微信表情包都用了哪些软件?当然必备这3款
- 火狐浏览器打印网页不全_打印网页显示不全,求助
- 搜狗推送接口之搜狗秒收录技巧分享