MATLAB学习之旅

Madrigal网站

        使用的数据来自Madrigal Database,开始在进行大数据处理时会为感叹一一点击下载文件对效率的影响,网站本身有基于MATLAB,Python,IDL的代码进行API,实现大量文件下载,网站Create download advanced script (openmadrigal.org)icon-default.png?t=N7T8http://cedar.openmadrigal.org/downloadAdvancedScript

        在Select parameters一栏里要选择自己所需的数据,如果不知道所选instrument包含那些数据,可以先下载一个读取看看有什么,或者Select single experiment选择出自己所需文件,然后再Select parameters/filters查看文件包含的数据类型

类似于在进行循环前先检查一下单一的事件,反馈出整体特征

然后首次使用还需要参照网站http://cedar.openmadrigal.org/madrigalDownload

下载第三方库,对Python等要求可参考Installing Madrigal for the first time (mit.edu)

同时网站有介绍如何使用该库,在使用MATLAB时也可慢慢理解这些,在使用时需要确保下载的库在路径中

madurl = 'http://cedar.openmadrigal.org';
cgiurl = getMadrigalCgiUrl(madurl)

%List all instruments, and their latitudes and longitudes
instArray = getInstrumentsWeb(cgiurl);
for i = 1:length(instArray)
    [s,errmsg] = sprintf('Instrument: %s, at lat %f and long %f', ...
            instArray(i).name, ...
            instArray(i).latitude, ...
            instArray(i).longitude);
     s
end

该函数会列出所有Instrument与经纬度

% list all files in the XXX experiment
startdate = datenum('01/01/2001');
enddate = datenum('12/31/2023');
expArray = getExperimentsWeb(cgiurl, 100, startdate, enddate, 1);
for i = 1:length(expArray)
    [s,errmsg] = sprintf('Experiment name: %s, at url %s and id %i', ...
            expArray(i).name, ...
            expArray(i).url, ...
            expArray(i).id);
     s
end

列出日期范围内标号为100的instrument的所有文件名与网站,id,其中仪器的代表标号在该网站的生产命令代码(图一)界面选择完成create后可见

% parameters in the last file(end)
parmArray = getParametersWeb(cgiurl, expFileArray(end).name)
for i = 1:10
    [s,errmsg] = sprintf('Parameter mnemonic: %s, description "%s" -- isMeasured = %i', ...
            parmArray(i).mnemonic, ...
            parmArray(i).description, ...
            parmArray(i).isMeasured);
     s
end

在expFileArray数组中的最后一个文件输出参数的部分信息,遍历前十个参数,输出每个参数的助记符(mnemonic)、描述(description)和是否被测量(isMeasured)的信息

有时会因为文件某参数在某一天为成功记录而记为0,那么我们使用循环读取大量文件也需要留意检查参数存在性,以上代码参考Madrigal网站介绍如何快速上手使用的部分,可在网站查看它所给的例子去对比,达到反馈Working on file /opt/cedar3/experiments/2004/jul/01jan04k/jul20240101_150km.001.hdf5,可判断使用成功

MATLAB读取文件

在使用时因为有参数遗漏,循环读取文件会在某处停止,为方便找出该部分文件并且继续运行最好设有保障,还可以继续优化模型,使用num_days = eomday(year, month); %获取给定年份和月份的天数,从而使用for day = 1:num_days提高效率。

自己还直接尝试在MATLAB上读取文件后直接出图,figure图窗就先出现1000+以上,然后有作图,占用过多资源,后面就使用saveas函数保存成图像,避免打开和渲染大量图形界面୧ ˙Ꙫ˙

for year = 2001:2009
    for month = 1:12
        for day = 1:31
            % XXX为读取的文件名
            filename = sprintf('XXX', year, month, day);
            
            % 检查文件是否存在
            if exist(filename, 'file') == 2
                try
                    % 尝试读取所需数据,并且文件格式为NC
                    timestamps = ncread(filename, 'timestamps');
                    
                    % 将读取到的信息添加到相应的数组中
                    all_timestamps = vertcat(all_timestamps, timestamps); % 提前写有空数组
                catch
                    % 如果读取参数时出现错误,显示警告并继续下一个文件
                    warning('An error occurred while reading the file: %s', filename);
                    continue; % 跳过当前循环,处理下一个文件
                end
            end            
        end
    end
end
  • 37
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值