我有一个非常简单的python例程,其中涉及循环遍历大约20,000个纬度,经度坐标的列表,并计算每个点到参考点的距离。

def compute_nearest_points( lat, lon, nPoints=5 ):

"""Find the nearest N points, given the input coordinates."""

points = session.query(PointIndex).all()

oldNearest = []

newNearest = []

for n in xrange(nPoints):

oldNearest.append(PointDistance(None,None,None,99999.0,99999.0))

newNearest.append(obj2)

#This is almost certainly an inappropriate use of deepcopy

# but how SHOULD I be doing this?!?!

for point in points:

distance = compute_spherical_law_of_cosines( lat, lon, point.avg_lat, point.avg_lon )

k = 0

for p in oldNearest:

if distance < p.distance:

newNearest[k] = PointDistance(

point.point, point.kana, point.english, point.avg_lat, point.avg_lon, distance=distance

)

break

else:

newNearest[k] = deepcopy(oldNearest[k])

k += 1

for j in range(k,nPoints-1):

newNearest[j+1] = deepcopy(oldNearest[j])

oldNearest = deepcopy(newNearest)

#We're done, now print the result

for point in oldNearest:

print point.station, point.english, point.distance

return

我最初使用完全相同的方法在C中编写了此代码,并且在那儿工作得很好,并且对于nPoints <=

100基本上是瞬时的。所以我决定将其移植到python,因为我想使用SqlAlchemy来做其他事情。

我首先移植了它,但没有现在可以使用该方法的deepcopy语句,这导致结果“奇数”或部分不正确,因为某些要点只是被复制为引用(我猜?我想吗?)-但是它仍然几乎与C版本一样快。

现在添加了deepcopy调用后,该例程可以正确执行其工作,但是却造成了极大的性能损失,并且现在需要几秒钟来完成相同的工作。

这似乎是一项很普通的工作,但是我显然不是以pythonic的方式来做。我应该如何做才能使我仍然获得正确的结果,而不必到处都包含Deepcopy?

编辑:

我已经找到了一个更简单,更快速的解决方案,

def compute_nearest_points2( lat, lon, nPoints=5 ):

"""Find the nearest N points, given the input coordinates."""

points = session.query(PointIndex).all()

nearest = []

for point in points:

distance = compute_spherical_law_of_cosines( lat, lon, point.avg_lat, point.avg_lon )

nearest.append(

PointDistance(

point.point, point.kana, point.english, point.avg_lat, point.avg_lon, distance=distance

)

)

nearest_points = sorted(nearest, key=lambda point: point.distance)[:nPoints]

for item in nearest_points:

print item.point, item.english, item.distance

return

因此,基本上,我只是复制输入内容并附加一个新值-

距参考点的距离。然后,我仅将“已排序”应用于结果列表,并指定排序键应为PointDistance对象的distance属性。

尽管我承认我不太了解为什么,但这比使用Deepcopy快得多。我想这取决于有效的C实现python的“排序”吗?

python怎么实现deepcopy_deepcopy和python-避免使用的提示?相关推荐

  1. 面试前赶紧看了5道Python Web面试题,Python面试题No17

    目录 本面试题题库,由公号:非本科程序员 整理发布 第1题: Flask中的请求上下文和应用上下文是什么? 第2题:django中间件的使用? 第3题: django开发中数据做过什么优化? 第4题: ...

  2. python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

    有多少伙伴是因为一句'人生苦短,我用Python'萌生想法学Python的!我跟大家更新过很多Python学习教程普及过多次的Python相关知识,不过大家还是还得计划一下Python学习路线!Pyt ...

  3. linux python版本_linux下更新Python版本并修改默认版本

    linux下更新Python版本并修改默认版本,有需要的朋友可以参考下. 很多情况下拿到的服务器python版本很低,需要自己动手更改默认python版本 1.从官网下载python安装包(这个版本可 ...

  4. Python培训教程分享:Python异常机制

    ​ 在学习Python技术的时候,我们经常会遇到一些异常,例如导致程序在运行过程中出现的中断或退出,我们都称之为异常,大多数的异常都不会被程序处理,而是以错误信息的形式展现出来.本期Python培训教 ...

  5. Python培训教程分享:Python中选择结构是什么

    越来越多的人开始报名学习Python技术,那么学习Python技术不是一两天就能学会的,本期小编为大家推荐的Python培训教程主要讲的是"Python中选择结构是什么",下面来看 ...

  6. Python培训教程分享:Python模块如何导入__all__属性?

    本期小编为大家带来的Python培训教程是关于"Python模块如何导入__all__属性?"的内容,后面在工作中是会遇到Python模块这个工作内容的,Python模块的开头通常 ...

  7. 【python教程入门学习】Python零基础入门爬虫项目

    Python入门爬虫项目 这是我的第一个python项目,分享给大家. 需求 我们目前正在开发一款产品其功能大致是:用户收到短信如:购买了电影票或者火车票机票之类的事件.然后app读取短信,解析短信, ...

  8. Python学习全家桶,Python初学者十一个热门问题

    一.学习Python要用什么系统? Python是跨平台的,什么系统都可以 二.学习Python用什么编辑器? 这里小编推荐pycharm PyCharm带有一整套可以帮助用户在使用Python语言开 ...

  9. python语言中的多行注释符是_有没有一种方法可以在Python中创建多行注释? - python...

    我最近开始研究Python,但是找不到如何实现多行注释.大多数语言都有块注释符号,例如 /* */ 我在Python中尝试过此方法,但它引发了错误,因此这可能不是正确的方法. Python实际上是否具 ...

  10. Python | 用PrettyPrinter,让Python输出更漂亮,你值得拥有

    PrettyPrinter是Python 3.6 及以上版本中的一个功能强大.支持语法高亮.描述性的美化打印包.它使用了改进的Wadler-Leijen布局算法,和Haskell打印美化库中的pret ...

最新文章

  1. 数据扩展性探讨和总结--转
  2. C/C++人机猜拳游戏
  3. 使用Java中的Try-With-Resource
  4. [html] 说说html5手势检测原理是什么?
  5. 关于类成员函数中访问同类对象的私有成员
  6. 京东:2022年将在全国范围内招聘超两万名高校毕业生
  7. MySQL事务操作原理与用法详解
  8. [redis] redis连接远程客户端查询数据
  9. Java面向对象总复习-QuickHit
  10. EXTJS学习系列提高篇:第八篇(转载)作者殷良胜,制作树形菜单之二
  11. 如何修改电脑的MAC地址(手把手更改)
  12. Learning Git Branching
  13. 郑州财经学院第54次全国计算机,郑州财经学院第二期教师博士班开班
  14. html 布局 flex,CSS flex布局
  15. 纯原生javascript下拉框表单美化实例教程
  16. A5M2数据库工具下载
  17. Esxi6.7-7.0设置自动启动无效原因
  18. 玩转EXCEL系列透视表实现按月份汇总数据
  19. 关于开展我市2012年度专业技术资格评审工作的通知
  20. python中day_python(day03)

热门文章

  1. java BorderLatout_浅谈java的BorderLayout的使用
  2. 【转】CSS3学习笔记 之 动态伪类选择器
  3. linux快速安装mysql教程
  4. iftop网卡流量监控软件
  5. Core Animation基础 1
  6. mokoid android open source HAL hacking in a picture
  7. java中将json转换成map
  8. 创新团队中常见的几种“怪人”
  9. The requested resource is not available. 原因,成功解决
  10. y空间兑换代码_如何让Python代码加速运行?