如何根据另一个数组对一维 3D 数组进行排序?

How to sort 3D array in first dimension based on another array?

提问人:Shayma 提问时间:11/4/2023 最后编辑:BarmarShayma 更新时间:11/4/2023 访问量:35

问:

我目前正在将一些代码从 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 中一样对数据进行排序。任何帮助将不胜感激。

python 数组 numpy 排序

评论


答:

1赞 chrslg 11/4/2023 #1

嗯,区别在于,在 Matlab 中,你似乎有一个记录数组或类似的东西(带有字段),而在这里,你有单独的数组(至少,你展示的唯一一个是 ,没有提到任何其他包含其他信息的数组,例如纬度和时间。lon2SSS_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]