python - 如何在每个网格的时间轴上对 3d numpy 掩码数组进行排序,即气候数据集的特定纬度和经度

我有一个气候数据集的 NetCDF 文件,它具有 3D 结构,形状为 20 * 445 * 445 作为(时间、纬度、经度)

我已使用 netCDF4 库将其阅读为 numpy.ma.core.MaskedArray

我想在 each gridtime axis 上对这个 NumPy 3D-array 数据进行排序,即

在任何特定的网格 (latitude,longitude) 中,value 应该是升序或降序

我已经尝试过 https://numpy.org/doc/stable/reference/generated/numpy.argsort.html,但是任何网格/像素处的 values 范围都超过了数据集的原始 value,因此它不起作用,即原始数据集具有 values 介于 7 到 16 之间,但经过排序后,数据集中的 values 范围为 1 到 19。

https://drive.google.com/file/d/1I8TEchsctDv0839ifjWJLuswyhsCkpkN/view?usp=sharinghttps://raw.githubusercontent.com/abhilashsinghimd/AASD_Geojson/main/3D_NC_to_Sort_along_time_axis.nc

import netCDF4 as nc
from netCDF4 import Dataset,num2date,date2num
import sys,os,numpy as np,logging
from datetime import date, datetime, timedelta
import matplotlib.pyplot as plt

fileName = 'some_file'
data = Dataset(fileName, 'r')

temp_data = data.variables['Band1'][:,:,:]

原始数据集的图

for i in range(0,20):
    data_to_plot = temp_data[i]
    
    fig, ax = plt.subplots(figsize = (4,4))
    ax.set_title('Layer '+ str(i))
    cax = ax.imshow(data_to_plot, cmap = plt.cm.Accent)
    
    cbar = plt.colorbar(cax,
                        orientation='vertical',
                        fraction=0.045, 
                        pad=0.05)
    ax.set_xlabel('X-axis')
    ax.set_ylabel('Y-axis')
sorted_temp_data = np.argsort(temp_data, axis=0)

排序数据集的图

for i in range(0,20):
    data_to_plot = sorted_temp_data[i]
    
    fig, ax = plt.subplots(figsize = (4,4))
    ax.set_title('Layer '+ str(i))
    cax = ax.imshow(data_to_plot, cmap = plt.cm.Accent)
    
    cbar = plt.colorbar(cax,
                        orientation='vertical',
                        fraction=0.045, 
                        pad=0.05)
    
    ax.set_xlabel('X-axis')
    ax.set_ylabel('Y-axis')

怎么做?

回答1

Numpy 的 argsort 函数不返回排序数组。它返回排序数组的索引。可以直接沿时间轴(假设时间轴为第0轴)对数组进行排序,如下:

np.sort(temp_data, axis=0)

如果你想使用 argsort 代码应该是这样的:

idx = np.argsort(temp_data, axis=0)
sort_data = np.take_along_axis(temp_data, idx,axis=0)

相似文章

随机推荐

最新文章