元胞数组,格式读取,时间序列

2024-06-17 19:18

本文主要是介绍元胞数组,格式读取,时间序列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

function [time_axis,on,temp,nan_index]=read_data(filename)
%Function name: read_data
%得到时间轴,向岸速度分量,温度,以及空缺值index
%input=
%         filename
%output=
%         timeseries arry, original onshoal speed arry, temperature array
%example:
%clear
%clc
%filename='1016brk011.asc';
%[timeseries, U, t]=read_data(filename);
%将资料和本程序所在文件夹设置为current文件夹后,指令窗输入help read_data可看到上述内容


fid=fopen(filename,'r'); %打开mooring文件
%按格式读取mooring资料,n遍,跳过开头十行
%C=textscan(fid,'%n %c %s %n %1n %2n %f %f %f %f %f',15853,'headerlines',10);
%按格式读取全部数据,跳过开头十行
C=textscan(fid,'%n %c %s %n %1n %2n %f %f %f %f %f','headerlines',10);


%读取mooring资料组成10*1的元胞数组
%数据格式:
% C1C2C3 C4C5C6 C7 C8 C9 C10 C11
%HHMM:SS DDMMYY DIR'N SPEED E/COMP N/COMP TEMP
% (deg) (cm/s) (cm/s) (cm/s) (deg C)
%1258: 0 9 292 331.48 28.27 -13.50 24.84 22.09
% C1C2 C3C4C5C6 C7 C8 C9 C10 C11

%定义各量
year=C{6}; %年
month=C{5}; %月
day=C{4}; %日
time=C{1}; %时刻
dir=C{7}; %流速方向,由北向顺时针旋转的角度
speed=C{8}; %流速总量
temp=C{11}; %温度

%读取时间得到时间轴,例如 (92+1900,2,3,2,23,0)年月日时分秒
%time=num2str(time,'%04d');将不足4位的整数前面补0,并转为字符串
min=mod(time,100);
hh=(time-min)/100;
time_axis=datenum(year+1900,month,day,hh,min,0);

%筛选NaN值并给出其位置
nan_index=find(speed==-8888.0);
speed(nan_index)=nan;
temp(nan_index)=nan;

%坐标轴顺时针转66度后,流速方向dir2(弧度)=dir-66
%向岸为on 沿岸为along
dir2=(dir-66)*pi/180;
on=speed.*sin(dir2);
al=speed.*cos(dir2);

fclose(fid);
return
——————————————————————————————————————
fid=fopen(filename,'r') fid为通道号,与fortran的unit类似
之后的textscan,fclose,frewind,都是打开通道号
r表示只读属性

C=textscan(fid,'format',N,'param',value) 将文件以format格式,参考param属性,读入C元胞数组,每个数代表一列数据,数据各有不同。类似fortran的那个自定义数据,加百分号表示数据的一部分

format=%flagNA %4s %7.2f %1c


%表示起始 ,flag可以为+ - 或0,N代表读取位数,A为数据属性,例如%7.2f,浮点数据,%4s 四位字,%1c,强制读取一位,包括空格。默认%之间由空格断开,如果定义了字符数,则把字符串读完,再以空格分隔。但是这个格式似乎不能像fortran那样将format单独拿出来
  
param
'delimiter',{'s','\'} 表示以s 和\这两个字符来分隔,空格不再作为间断符,但怎么让两者都起作用,我没搞明。
'headerlines',10 表示跳过开头10行,再开始读取。
textscan读取后,如果文件没有结束,也没有关闭,也没有frewind,那么下一次读取将接着来。
------------------------------------------------------------------------
脚本文件
clear
clc

%载入数据
filename='1016brk011.asc';
[time_axis,u,temp]=read_data(filename);

%选择起止时间,
%时间格式(1992,2,18)or(1992,2,18,12,58,0)
start=[1992,2,10];
terminate=[1992,2,12];

n1=find(time_axis==datenum(start));
n2=find(time_axis==datenum(terminate));
plot(time_axis(n1:n2),u(n1:n2));
hold on
plot(time_axis(n1:n2),temp(n1:n2));
datetick('x',6);
-------------------------------------------------------------------------
datestr,datenum,datevec,datetick
datestr为字符型‘2001-01-29,12:34:00’类似这样,还有其他很多格式
datevec为向量型 [2001, 1, 29, 12,34,0] [2001,1,29] 都可
两者可以互转,且都可以转为datenum,一个时间点对应一个数,
这三者都可以组成数组,代表一个时间序列
作图时只能以datenum序列为坐标
plot(x,y);
datetick('x',N); N对应坐标显示的格式,显示为datestr

这篇关于元胞数组,格式读取,时间序列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070318

相关文章

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL中DATE_FORMAT时间函数的使用小结

《MySQL中DATE_FORMAT时间函数的使用小结》本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或... 目录前言DATE_FORMAT时间函数总结前言mysql可以使用DATE_FORMAT获取日期字段

Java中数组与栈和堆之间的关系说明

《Java中数组与栈和堆之间的关系说明》文章讲解了Java数组的初始化方式、内存存储机制、引用传递特性及遍历、排序、拷贝技巧,强调引用数据类型方法调用时形参可能修改实参,但需注意引用指向单一对象的特性... 目录Java中数组与栈和堆的关系遍历数组接下来是一些编程小技巧总结Java中数组与栈和堆的关系关于

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp