首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何利用netcdf数据在matlab中绘制轮廓图

如何利用netcdf数据在matlab中绘制轮廓图
EN

Stack Overflow用户
提问于 2022-08-10 21:38:59
回答 1查看 74关注 0票数 0

我使用NetCDF数据在python中创建了一个等高线图。我画的是x方向的速度,形状(1,124,128,128),其中的尺寸是(时间,z,y,x)。我迷路的地方是在MATLAB中完成我的情节。在python中工作的代码是

代码语言:javascript
代码运行次数:0
运行
复制
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代码中的结果?

代码语言:javascript
代码运行次数:0
运行
复制
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。您如何安排索引片来使此工作?

代码语言:javascript
代码运行次数:0
运行
复制
print(np.shape(nc.variables["u"][0,0,:,:])) # t[0], z[0], y[:],x[:]
plt.contourf(nc.variables['u'][0,0,:,:])
EN

回答 1

Stack Overflow用户

发布于 2022-08-11 14:28:16

我已经能够用MATLAB permute函数回答我自己的问题。如果您试图将python中的数组切片转换为MATLAB,请如下所示。

代码语言:javascript
代码运行次数:0
运行
复制
# 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是

代码语言:javascript
代码运行次数:0
运行
复制
% In MATLAB
S = permute(u, [3,2,1]) % rearranges the vector to be [z, y, x] 
contourf(S(:,:,1))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73313010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档