我有一個具有 20 * 445 * 445 形狀的 3D 結構的氣候資料集的 NetCDF 檔案(時間、緯度、經度)
我已將其閱讀為numpy.ma.core.MaskedArray使用netCDF4庫
我想在ieNumPy 3D-array上對這些資料進行排序time axiseach grid
在任何特定的網格(latitude,longitude)中,值應按升序或降序排列
我已經嘗試過numpy.argsort 函式,但任何網格/像素的值范圍都超過了資料集的原始值,所以它不起作用,即原始資料集的值在 7 到 16 之間,但排序后,資料集中的值范圍為1 到 19。
代碼可在 Google Collab 獲得,NetCDF 可在此處獲得
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')
怎么做?
uj5u.com熱心網友回復:
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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/475078.html
標籤:Python 麻木的 numpy-ndarray netcdf netcdf4
下一篇:如何合并跨越2年的冬季月份?
