爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 30809|回复: 10

[程序设计] 【求问】matlab批量读取nc文件特定时间特定经纬度对应的高度层数据

[复制链接]
回帖奖励 5 金钱 回复本帖可获得 5 金钱奖励! 每人限 1 次

新浪微博达人勋

发表于 2021-3-31 01:03:51 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
nc文件里有个变量是这样分布的:经度x纬度x高度x时次
假设特定格点特定时间[nx,ny,nt]上所有高度层对应的数据为一组数据,需要n组这样的数据。
在不先读取该变量全部数据的情况下,我的方法如下:

  1. stride=[1,1,1,1];num=[1,1,37,1];
  2. for k=1:n
  3.     start=[nx1(k),ny1(k),1,nt(k)];
  4.     t(k,1:37)=ncread(nc_filename,'q',start,num,stride);
  5. end
复制代码



但是这种循环读很慢,请问有直接的批量提取数据方法吗?我写成数组方式提示串联维度不一样
不要先读取该变量全部数据的的方法



密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-4-1 08:26:23 | 显示全部楼层

回帖奖励 +5 金钱

循环慢,可能是你的循环方式有问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-2 17:22:40 | 显示全部楼层

回帖奖励 +5 金钱

提取的是四维数组,你的t是二维数组,肯定是不一样的。而且每次循环里重新读取一次nc,本来就会很慢,最好先提取出来,然后直接在matlab里读取。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-5 14:42:02 | 显示全部楼层
yycdyy 发表于 2021-4-2 17:22
提取的是四维数组,你的t是二维数组,肯定是不一样的。而且每次循环里重新读取一次nc,本来就会很慢,最好 ...

我试过全提取,但是由于数据太大了把电脑弄死机了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-6 17:09:20 | 显示全部楼层
greenG 发表于 2021-4-5 14:42
我试过全提取,但是由于数据太大了把电脑弄死机了

可以把你的数据和代码贴出来,这样容易看。最好放网盘里。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-7 19:05:02 | 显示全部楼层
yycdyy 发表于 2021-4-6 17:09
可以把你的数据和代码贴出来,这样容易看。最好放网盘里。

数据没法贴,将近10个G呢。
就很简单地一次读取全部,比如说
  1. t=ncread(filename,'t');
复制代码

这样读会导致电脑变卡用不了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-8 10:24:10 | 显示全部楼层
greenG 发表于 2021-4-7 19:05
数据没法贴,将近10个G呢。
就很简单地一次读取全部,比如说

你这样直接读电脑会卡住的原因应该是电脑内存占用满了。可以先转换成tall之类的数组存到硬盘中,然后分层读取nc存到tall数组里,但是这样的速度应该也没比你现在分区域读取的速度快。目前想不到更好的办法了。
至于你循环里的t,维度设成4维的,比如t=(:,:,k,1:37)。而且也不用设置stride,毕竟你是逐一读取。

评分

参与人数 1金钱 +5 收起 理由
greenG + 5

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-10 09:56:05 | 显示全部楼层
yycdyy 发表于 2021-4-8 10:24
你这样直接读电脑会卡住的原因应该是电脑内存占用满了。可以先转换成tall之类的数组存到硬盘中,然后分层 ...

谢谢,多了一个新知识,我会去了解了解tall数组的。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-16 09:59:23 | 显示全部楼层
greenG 发表于 2021-4-10 09:56
谢谢,多了一个新知识,我会去了解了解tall数组的。

在论坛看到一篇帖子,你可以参考下:
nc数据全解读-2   matlab读取方法ncread、netcdf
http://bbs.06climate.com/forum.p ... 1&fromuid=70693
(出处: 气象家园)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-5-8 11:12:59 | 显示全部楼层

回帖奖励 +5 金钱

先设定数据维数
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表