我对如何在 numpy 中准确地对 3D 数组进行切片和排序感到有些困惑。似乎有很多方法可以手动执行此操作,但我需要使用numpy.where()
. 例如,如果lo360
是 2D 经度值,则 2D 中的lat2d
纬度值yi
是经度值的一维数组,并且xi
是纬度值的一维数组。
xi
并yi
动态变化以表示一个小的地理区域,而lo360
和lat2d
是类型为 (-90,90) 和 (0,360) 的行星的静态纬度和经度。xi
与但形式相似,lo360
但yi
降序而不是升序。因此,如果我有一个 3D 数组表示A(levels,lat,lon)
并且我想提取一个区域:
slice2d = np.where( (lo360 <= xi.max()) &
(lo360 >= xi.min()) &
(lat2d <= yi.max()) &
(lat2d >= yi.min()) )
lon_old = lo360[slice2d]; print lon_old.shape
(441,)
当我想要一个 2D 切片时,这会返回一个 1D 数组。数据是正确的,所以这不是我的问题。
然后,当我尝试对 3D 数组进行切片时,A[i][slice2d]
我得到一个不易动态验证的 1D 数组。我习惯griddata
了 3D 数组xi
和yi
分辨率,但我将yi
lat 更改为升序yi = yi[::-1]
::
for i in np.arange(4):
nvals[i] = matplotlib.mlab.griddata(lat_old,lon_old,
mvals[i][slice2d],
yi,xi)
这是我认为问题开始的地方,我需要结果有下降的纬度,所以我这样做是为了nvals
:nvals = nvals[:,::-1,:]
。但是数据全都搞砸了。我怀疑索引中存在一些错误,但是由于 python 没有返回错误,所以我正在对索引做一些事情,思考一件事,但得到另一件事。
也许你们中的一位专家可以发现一些奇怪的东西,或者提出更好的方法。当我弄清楚如何附加文件时,我会附上图像。