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实现“排序”?

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Spring Boot Vue全栈开发实战_java web前端

    Spring Boot Vue全栈开发实战_java web前端构建SpringBoot项目并通过登录DEMO打通前后端的联系,为下一步开发打下基础。

    2022年10月12日
  • js也能写3D游戏?

    js也能写3D游戏?看完这本书《3DGameProgramingforKids》之后,发现3D游戏的学习,也可以使用javascript来写的。先要上这个网站https://threejs.org,然后下载它的three.js源码放到一个目录,比如js。然后放入这段代码: Myfirstthree.jsapp body{margin:0;} canvas{w

  • SCSA两个月

    SCSA两个月在一台HPDL380G3(集成5iRAID卡),上尝试安装solaris10,总是因为iLO的VirtualMedia问题而导致无法读盘,只好放弃。今天在Vmware上面安装好了solaris10,正式开始了solaris学习之旅。SCSA,两个月够么?两个月之后就知道了! 转载于:https://blog.51cto.com/youngshen/8013…

  • Hadoop面试题总结「建议收藏」

    Hadoop面试题总结「建议收藏」Hadoop面试题总结1.hadoop的TextInputFormat作用是什么?如何自定义实现?InputFormat会在map操作之前对数据进行两方面的预处理:gitSplits,返回的是InputSplit数组,对数据进行split切片,每一个切片都需要一个map任务去处理。getRecordReader,返回的是RecordReader对象,将每个切片中的数据转换为<k…

  • go mod 在使用私有gitlab时“go-get=1”错误解决

    go mod 在使用私有gitlab时“go-get=1”错误解决

  • id门禁卡复制到手机_门禁卡怎么复制到苹果手机?「建议收藏」

    id门禁卡复制到手机_门禁卡怎么复制到苹果手机?「建议收藏」NFC手机一枚RootExplorerNFCTaginfo方法/步骤1,读取卡的62616964757a686964616fe78988e69d8331333363396461ID。安装“NFCTagInfo”,打开手机的NFC设置,门禁卡贴到手机后盖NFC部分,“NFCTagInfo”读取校园卡ID。可以看到我的卡ID是13:67:A9:0A修改手机NFC的ID。打开R.E.管理器,根目…

发表回复

您的电子邮箱地址不会被公开。

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