提问人:Shayma 提问时间:11/4/2023 最后编辑:BarmarShayma 更新时间:11/4/2023 访问量:35
如何根据另一个数组对一维 3D 数组进行排序?
How to sort 3D array in first dimension based on another array?
问:
我目前正在将一些代码从 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 中一样对数据进行排序。任何帮助将不胜感激。
答:
1赞
chrslg
11/4/2023
#1
嗯,区别在于,在 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)
然后,您可以通过提取排序索引,然后将它们应用于所有 3 个数组进行排序argsort
ix=SSS_lon.argsort()
SSS_lon2=SSS_lon[ix]
SSS_lat2=SSS_lat[ix]
SSS_tim2=SSS_tim[ix]
上一个:实际返回最小值
评论