python deepcopy函数实现_python 多线程

python deepcopy函数实现_python 多线程我有一个非常简单的python例程,它涉及循环遍历大约20000个纬度、经度坐标的列表,并计算每个点到参考点的距离。defcompute_nearest_points(lat,lon,nPoints=5):”””FindthenearestNpoints,giventheinputcoordinates.”””points=session.query(PointInd…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

我有一个非常简单的python例程,它涉及循环遍历大约20000个纬度、经度坐标的列表,并计算每个点到参考点的距离。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&lt;=100基本上是即时的。所以我决定将它移植到python,因为我想使用SqlAlchemy来做一些其他的事情。

我第一次移植它时没有使用deepcopy语句,而现在这些语句使方法变得复杂,这导致结果“奇怪”,或者部分不正确,因为有些点只是作为引用被复制(我猜?我想?)–但它的速度仍然几乎和C版一样快。

现在,随着deepcopy调用的增加,这个例程正确地完成了它的工作,但是它已经产生了一个极端的性能损失,现在需要几秒钟来完成相同的工作。

这似乎是一项很普通的工作,但我显然不是像Python一样。我应该怎么做才能得到正确的结果,但不必在任何地方都包含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

所以基本上我只是复制输入并附加一个新的值-到参考点的距离。然后我只对结果列表应用“sorted”,指定sort键应该是PointDistance对象的distance属性。

这比使用deepcopy快得多,尽管我承认我不太明白为什么。我想这要归功于python的高效C实现“排序”?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188624.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何在Ubuntu 14.04 和14.10 上安装新的字体

    如何在Ubuntu 14.04 和14.10 上安装新的字体

    2022年3月2日
    40
  • 【Spring基础】JDK动态代理实现原理(jdk8)

    【Spring基础】JDK动态代理实现原理(jdk8)前言Github:https://github.com/yihonglei/thinking-in-spring一JDK动态代理在了解JDK动态代理前,有需要可以了解下代理模式。参考:https://blog.csdn.net/yhl_jxy/article/details/52679882;天天的都听到人们说JDK动态代理,听上去感觉好屌的样子,为什么要叫JDK动态代理?…

    2022年6月17日
    41
  • vxWorks延时函数

    vxWorks延时函数原文地址:https://blog.csdn.net/juana1/article/details/6673762在应用编程的时候,通常会碰到需要一个任务在特定的延时之后执行一个指定的动作,如等待外设以确保数据可靠,控制扬声器发声时间以及串口通信超时重发等。这就需要利用定时器机制来计量特定长度的时间段。vxWorks作为实时嵌入式系统,提供多样的定时接口函数。下面结合我的项目经历和…

    2022年6月16日
    52
  • 基本字符串压缩

    基本字符串压缩题目 利用字符重复出现的次数 编写一个方法 实现基本的字符串压缩功能 比如 字符串 aabcccccaaa 经压缩会变成 a2b1c5a3 若压缩后的字符串没有变短 则返回原先的字符串 给定一个 stringiniStr 为待压缩的串 长度小于等于 3000 保证串内字符均由大小写英文字母组成 返回一个 string 为所求的压缩后或未变化的串 思路 咋一分析 题目还是很简单的

    2025年7月17日
    4
  • 耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备)

    耗时n年,38页《数据仓库知识体系.pdf》(数据岗位必备)拥有本篇文章,意味着你拥有一本完善的书籍,本篇文章整理了数据仓库领域,几乎所有的知识点。

    2022年6月5日
    31
  • 轻松解析excel文件 —-利用MFC读取excel文件

    轻松解析excel文件 —-利用MFC读取excel文件在项目中需要解析excel文件,尝试了很多办法,最后还是利用MFC自带的解析Excel类。网上的资源很多,前面添加类步骤基本差不多,都能成功,但是在自己写类进行封装的时候,抄袭现象很明显,很多错误还是接着一字不差的发上来。最后找了一个错误不是很多的,自己修改封装,先附上一个demo。(1)在Button控件下添加以下代码用于选取需要读取的文件stringpath; path=CT…

    2022年6月28日
    98

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号