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

问题描述 投票:0回答:1

我目前正在将一些代码从 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 arrays numpy sorting
1个回答
0
投票

嗯,不同之处在于,在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]
© www.soinside.com 2019 - 2024. All rights reserved.