我使用NetCDF数据在python中创建了一个等高线图。我画的是x方向的速度,形状(1,124,128,128),其中的尺寸是(时间,z,y,x)。我迷路的地方是在MATLAB中完成我的情节。在python中工作的代码是
import netCDF4 as NC
from netCDF4 import Dataset as NetCDFFile
import matplotlib.pyplot as plt
import numpy as np
nc = NetCDFFile('XYZ_time_1.nc')
u = nc.variables["u"][:,:,:,:] # Velcity in x direction, size(1, 124, 128, 128), [t,z,y,x]
plt.contourf(u[0,:,:,0]) # time[0], z[:], y[:], x[0]
下面是我在MATLAB中翻译的尝试。数组的大小是从python用维度(x、y、z、time)解释的大小(128、128、124、1)向后的。我对MATLAB很陌生,不知道如何复制代码。在MATLAB中,时间维不包含在size()函数中。如何使用数组切片在MATLAB中绘制轮廓图,从而复制上述python代码中的结果?
filename = 'XYZ_time_1.nc';
ncdisp(filename);
u = ncread(filename, 'u'); # size(128, 128, 124), time not included?
contour(:,:,1) # (x, y, z)
上面的MATLAB代码将适用于python中的特殊情况。数组索引是我开始迷路的地方。我想要一个固定的x索引的y对z。您如何安排索引片来使此工作?
print(np.shape(nc.variables["u"][0,0,:,:])) # t[0], z[0], y[:],x[:]
plt.contourf(nc.variables['u'][0,0,:,:])
发布于 2022-08-11 06:28:16
我已经能够用MATLAB permute函数回答我自己的问题。如果您试图将python中的数组切片转换为MATLAB,请如下所示。
# In python
import netCDF4 as NC
from netCDF4 import Dataset as NetCDFFile
import matplotlib.pyplot as plt
import numpy as np
nc = NetCDFFile('XYZ_time_1.nc')
u = nc.variables["u"][:,:,:,:]
plt.contourf(u[0,:,:,0]) # time[0], z[:], y[:], x[0]
翻译成MATLAB是
% In MATLAB
S = permute(u, [3,2,1]) % rearranges the vector to be [z, y, x]
contourf(S(:,:,1))
https://stackoverflow.com/questions/73313010
复制相似问题