我目前正在将一些代码从 Matlab 转换为 Python。
我有一个 3D 数组,其尺寸基于经度 x 纬度 x 时间。经度当前为 [-180 180],我想将其转换为 [0 360],以便将其插值到同一网格作为不同的变量。转换后,我需要对 3D 数组中的值进行排序以匹配排序后的 [0 360 个值]。
我在 Matlab 中的代码:
SSS_ships=flip(SSS_ships,2);
SSS_ship.lon2=wrapTo360(SSS_interp.lon);
[SSS_ship.lon2,ix]=sort(SSS_ship.lon2);
SSS_ship.sss=SSS_ships(ix,:,:);
到目前为止我的 Python 代码:
idx=np.where(SSS_lon < 0)
SSS_lon[idx]=SSS_lon[idx]+360
我一直在寻找一个可以让我像在 Matlab 中一样对数据进行排序的函数。任何帮助将不胜感激。
嗯,不同之处在于,在Matlab中,你似乎有一个记录数组或类似的东西(带有一个字段
lon2
),而在这里,你有单独的数组(至少,你展示的唯一一个数组)是 SSS_lon
,没有提及包含其他信息(例如纬度和时间)的其他数组。
假设你有3个不同的数组
import numpy as np
SSS_lon=np.random.rand(10)*360-180
SSS_lat=np.random.rand(10)*180-90
SSS_tim=np.random.rand(10)
然后,您可以通过使用
argsort
提取排序索引然后将它们应用到所有 3 个数组来排序
ix=SSS_lon.argsort()
SSS_lon2=SSS_lon[ix]
SSS_lat2=SSS_lat[ix]
SSS_tim2=SSS_tim[ix]