matlab - 从文本文件中读取特定数据并计算结果
问题描述
我必须从文本文件中读取数据:
如何找到机器开启的总时间?当机器开启时,我可以获得单独的时间,但我似乎无法弄清楚如何添加它以获得总时间。
注意:简单地添加它不会给出答案。总准时应为 31。
解决方案
通过插值使用时间戳构建状态图
输出结果:
读入数据:
这个问题有两个关键部分,读取数据和评估数据。该textscan()
函数可用于读取格式规范的数据%d %f %s
。这表明第 1 列应该作为整数读取/扫描,%d
第 2 列作为浮点数,%f
第 3 列作为字符串读取/扫描%s
。所有这些数据都被扫描到Data
本例中称为的元胞数组中。
分析数据:
在将 的列Data
分成各自的数组之后,可以评估对应于“开启”时间的行。这里该contains()
函数用于评估Status
数组/列中的行是否显示为“on”。当在数组中找到第二个参数时,该contains()
函数返回真“1”,否则为第一个参数中的每个元素返回“0”。下一步是使用矩阵索引来索引数组以获取“on”Time
的相应持续时间。Status
从这里可以使用插值来构建状态图,其中“1”代表“ON”,“0”代表“OFF”。使用interp1()
函数允许为一组新的点/轴插值信号。在这种情况下,我们需要在时间戳之间插入所有状态。使用之前的插值方法可以达到预期的效果。获取图表后,Interpolated_Binary_State
可以根据文本文件中的时间戳获取总和以获取持续时间。
完整脚本:
clear;
clc;
%Reading in the data as a cell array%
fileID = fopen('Text.txt', 'r');
Header = string(fgetl(fileID));
Data = textscan(fileID,'%d %f %s');
fclose(fileID);
%Splitting the data into specific columns%
Time = Data(:,1);
Time = Time{1,1};
Power = Data(:,2);
Power = Power{1,1};
Status = Data(:,3);
Status = string(Status{1,1});
%Binary state graph%
Binary_State = contains(Status,"on");
%Interpolating the binary state graph for every interval between the
%timestamps%
Interpolated_Time = (0:max(Time));
Interpolated_Binary_State = interp1(double(Time),double(Binary_State),double(Interpolated_Time),'previous');
%Plotting the state graph%
stairs(Interpolated_Time,Interpolated_Binary_State);
title("State Graph ON (1) and OFF (0)");
xlabel("Time"); ylabel("State (ON/OFF)");
ylim([0 1.1]);
xticks(0:max(Time));
Total_On_Time = sum(Interpolated_Binary_State)
使用 MATLAB R2019b 运行
推荐阅读
- python - 导入 SMOTE 时出现不平衡学习模块 base.py 文件语法错误
- r - devtools::check() 注意到 .lintr 作为隐藏文件和目录
- flutter - 如何在边框中左右对齐
- javascript - 在 http 请求中使用 2 .then 的目的是什么?
- xamarin.forms - MSAL 提示(Microsoft 身份验证库)因 Intune 公司门户应用程序而失败
- javascript - 将焦点放在输入上并更改 li 背景颜色
- c++ - 关于两个类构造函数的C++问题
- javascript - TS2339:“元素”类型上不存在属性“样式”?
- java - 如何避免在 IDEA 中强制转换类型?
- android-studio - 我可以通过互联网更新我的 Mutablelist 吗?