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

6bc51xsx  于 2023-11-18  发布在  其他
关注(0)|答案(1)|浏览(85)

我正在把Matlab的一些代码转换成Python。
我有一个3D数组,其维度基于经度x纬度x时间。经度当前为[-180 180],我想将其转换为[0 360],以便将其插入到同一网格作为不同的变量。转换后,我需要对3D数组中的值进行排序,以匹配排序后的[0 360 values]。
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中一样对数据进行排序。任何帮助都将不胜感激。

snvhrwxg

snvhrwxg1#

好吧,不同的是,在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]

相关问题