有关python,numexpr和数组运算加速的应用求助
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关python,numexpr和数组运算加速的应用求助相关的知识,希望对你有一定的参考价值。
#计算两点经纬度间距离-m
from math import radians, cos, sin, asin, sqrt
import numpy as np
import numexpr as ne
def geodistance(lng1,lat1,lng2,lat2): #定义geodistance为运算两点经纬度间的距离为多少米的函数
lng1, lat1, lng2, lat2 = map(radians, [lng1, lat1, lng2, lat2])
dlon=lng2-lng1
dlat=lat2-lat1
a=sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
dis=2*asin(sqrt(a))*6371*1000
return dis
假设现在有lng1,lat1,lng2,lat2的数组
lng1=np.arange(1,180,0.0001)
lat1=np.arange(1,180,0.0001)
lng2=np.arange(180,360,0.0001)
lat2=np.arange(180,360,0.0001)
有没有办法将上述数组代入代入ne.evaluate()来运算?小弟试过a = ne.evaluate("geodistance(lng1,lat1,lng2,lat2)") 报错?还是有什么高见可以加快运算速度?因为有上2000w的数据需要这样运算。。。求助各位大神
import numpy as np
import numexpr as ne
def geodistance(lng1,lat1,lng2,lat2): #定义geodistance为运算两点经纬度间的距离为多少米的函数
lng1,lat1,lng2,lat2=list(map(lambda x:list(map(radians,x)) ,[lng1, lat1, lng2, lat2]))
dlon=[x-y for x,y in zip(lng2,lng1)]
dlat=[x-y for x,y in zip(lat2,lat1)]
a=[sin(a/2)**2+cos(b)*cos(c)*sin(d/2)**2 for a,b,c,d in zip(dlat, lat1, lat2, dlon)]
dis=[2*i*sin(sqrt(i))*6371*1000 for i in a]
return dis
lng1=np.arange(0,180,0.0001)
lat1=np.arange(0,180,0.0001)
lng2=np.arange(180,360,0.0001)
lat2=np.arange(180,360,0.0001)
a=geodistance(lng1,lat1,lng2,lat2)本回答被提问者采纳
torch和numpy的对比
参考技术A 一、numpy和torchnumpy是python中处理数据的模块,可以处理各种的矩阵(matrix)。
Torch自称为神经网络中的numpy。它会将torch产生的tensor放在GPU中加速运算,就像numpy会把array放在CPU中加速运算。
二.numpy array与torch tensor之间的相互转换
array2tensor=torch.from_numpy(numpy_data)#numpy array->torch tensor,其参数必须是数组形式
tensor2array=torch_data.numpy()#torch tensor->numpy array
三. 用法对比
numpy 数据形式下矩阵a,位置变化用a.transpose(1,2,0)
tensor 数据格式下的矩阵b, 位置变化时 b.permute(1,2,0)
以上是关于有关python,numexpr和数组运算加速的应用求助的主要内容,如果未能解决你的问题,请参考以下文章