有关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的数据需要这样运算。。。求助各位大神

参考技术A 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=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和torch

numpy是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和数组运算加速的应用求助的主要内容,如果未能解决你的问题,请参考以下文章

用Python 做策略回测,耗时很长,有啥加速办法

C++ 重载运算符<<

numexpr low version warning

python学习随笔-向量化

高性能python

把Numpy加速700倍?用 CuPy 吧!