python - 如何设置一个智能单线器来计算非常大的数据?
问题描述
我用维度 ( ) 屏蔽了纬度 ( Xpos
) 和经度 ( ) 数组。Ypos
125,800,000
我想计算数组内的纬度和经度差异。这是数组Xpos
(Ypos
类似)。
masked_array( data = [ [-2.0551843643188477, -2.637551784515381, -2.720881223678589, ..., 2.2812530994415283, 2.281250476837158, 2.281254768371582 ],
[-2.3242127895355225, -2.804257869720459, -2.8825504779815674, ..., 2.2812530994415283, 2.281250476837158, 2.281254768371582 ],
[-2.073770523071289, -2.6198980808258057, -2.708889961242676, ..., 2.2812530994415283, 2.281250476837158, 2.281254768371582 ],
...,
[-3.517531633377075, -2.908338785171509, -2.9069409370422363, ..., 2.2812530994415283, 2.281250476837158, 2.281254768371582 ],
[-3.688690662384033, -3.0086288452148438, -3.010164260864258, ..., 2.2812530994415283, 2.281250476837158, 2.281254768371582 ],
[-3.520817518234253, -2.943941116333008, -2.941941738128662, ..., 2.2812530994415283, 2.281250476837158, 2.281254768371582 ]
],
mask = [ [ False, False, False, ..., False, False, False ],
[ False, False, False, ..., False, False, False],
[ False, False, False, ..., False, False, False],
...,
[ False, False, False, ..., False, False, False],
[ False, False, False, ..., False, False, False],
[ False, False, False, ..., False, False, False]
],
fill_value = 1e+20,
dtype = float32
)
这是我的代码,它可以工作,但需要很长时间才能计算。
Dist= np.zeros((len(XposApr),len(XposApr[0])))
DiffLon=np.zeros((len(XposApr),len(XposApr[0])))
DiffLat=np.zeros((len(XposApr),len(XposApr[0])))
for i in range (1,len(XposApr),12):
for j in range (0,len(XposApr[0])):
DiffLon[i][j]=(XposApr[i][j]-XposApr[i-1][j])
DiffLat[i][j]=(YposApr[i][j]-YposApr[i-1][j])
我真的不知道如何制作著名的单线,这是我尝试过的,但不起作用:
DistLon = [XposApr[i][j]-XposApr[i-1][j] for i in enumerate (XposApr) and j in enumerate (XposApr[0])]
是否可以制作一个单行代码或其他代码,使计算速度更快?
提前致谢!
解决方案
是否可以制作一个单行代码或其他代码,使计算速度更快?
语法格式不是实现速度的核心,
智能矢量化或重新制定是:
在光荣的numba
团队决定将对掩蔽阵列操作的支持转移到前端之前,缺乏来自numba.jit( ... )
(掩蔽阵列支持 #2103 )的 JIT 加速速度
因此,让我们尝试使用numpy
-native 步骤:
内部循环可能首先摆脱缓慢的 GIL 驱动运动:
for i in range ( 1, len( XposApr ), 12 ):
#or j in range ( 0, len( XposApr[0] ) ):
DiffLon[i][:] = ( XposApr[i][:] - XposApr[i-1][:] )
DiffLat[i][:] = ( YposApr[i][:] - YposApr[i-1][:] )
但是,如果我正确阅读了布局,则可以通过以下方式在两个维度上解决整个问题:
DiffLon[1:len( XposApr ):12] = ( XposApr[1:len( XposApr ):12]
- XposApr[0:len( XposApr )-1:12]
)
DiffLat[1:len( XposApr ):12] = ( YposApr[1:len( XposApr ):12]
- YposApr[0:len( XposApr )-1:12]
)
而且我相信@Divakar或@cᴏʟᴅsᴘᴇᴇᴅ,这里真正的numpy
大师会准备告诉你更聪明、更有效的切片/矢量化技巧,所以请耐心等待:o)
推荐阅读
- windows - 打开-保存对话框自动打开当前在 Windows 资源管理器中打开的文件夹
- javascript - jquery动画和css动画之间的滞后
- postgresql - 使用 LEFT JOIN 和 ON 子句时如何修复 WHEREerror
- node.js - 从节点 js child_process 访问 $HOME 变量?
- python - 1 + 1在python中可以等于3吗?
- database - 从 sql developer 中连接的特定用户导出表
- javascript - 如何将 csv ajax 请求的返回值用于 x 和 y 值?
- c# - 使用 JWT 为 LinkedIn 社交登录添加声明
- python - Python check_output 调用 eval(带参数)失败
- node.js - 多节点应用进程如何复用端口