matlab数据整合

您所在的位置:网站首页 合并数据代码 matlab数据整合

matlab数据整合

2023-10-16 11:31| 来源: 网络整理| 查看: 265

matlab数据整合 一、读取数据1、load/importdata/csvread2、dlmread3、fscanf(底层函数) 二、保存数据三、最终代码 内容来源众多,故不一一挂出,本文章仅仅为自己记录学习内容,如果相关内容涉及他人原创,需要删除或者挂原文链接的联系我。

一、读取数据

matlab 文本文件的读写可以分为两类,一类是高级函数,一类是底层函数。

高级函数运用起来简单,但是定制性差。底层函数用法复杂,灵活性高

1、load/importdata/csvread

对于简单文本读取(文本内容只包括数值,并且以逗号或者空格为分隔符),三个函数用法基本一致。

load、importdata常见用法:

datapath=[datapath,filename] m=load(datapath) m=importdata(datapath)

csvread读取csv:

m=csvread('filename',row,col,range) M=csvread(filename,R1,C1,[R1 C1 R2 C2]) % 仅读取行偏移量 R1 和 R2 及列偏移

读取文件,除了文件名,还指定了开始读取位置的行号(row)和列号(col)。这里行号和列号以0开始计数。也就是说row=0,col=0表示一行一列

range限定了读取范围,range = [R1 C1 R2 C2]。

例如,**偏移量R1=1,C1=0,R2=2,C2=2;**从文件中读取从第2行到第3行,第1列到第3列框定的元素组成一个新的矩阵,叫做M

**注意:**csv文件中的空项,读到矩阵中时,会初始化为0.

2、dlmread

dlmread的用法:能够指定分隔符(csvread只能读取逗号分隔符和空格分隔符)

m=dlmread(filename,delimiter) M=dlmread(filename,"。")

delimiter 为分隔符; 如果行列数不一致的数据, dlmread 会自动在空白数据处补0。

3、fscanf(底层函数)

fscanf的用法:按指定格式从文本文件中读取数据

例:文本文件 test.txt 包含以下数据: 1。2。3。1 5。1。1。8 9。7。6。2 4。1。5。1

fid = fopen('test.txt'); %通过fopen获取文件标识 formatSpec = '%d。%d。%d。%d'; %指定读取格式 A = fscanf(fid,formatSpec ,[4,4]); %读取文件数据并存为4*4矩阵 fclose(fid); %调用fclose关闭文件 A = A.’ %由于fscanf是列主序,因此读取完还需要进行转置 A= 1 2 3 1 5 1 1 8 9 7 6 2 4 1 5 1 fid = fopen('test.txt'); A = fscanf(fid,'%d。',[4,4]) fclose(fid); A = A.' A= 1 2 3 1

原因:当文件指针读取完13时,formatSpec需要匹配的字符串为“。”,但是1后边的下一字符串为5,匹配失败,fscanf停止读取

复杂文本文件(把数字信息提取出来):

lambda: 7.580000e-05 lambdaB: 8.000000e-05 initial pulse width: 7.853636e-13 output pulse width: 6.253030e-13 dispersion length: 6.307732e-02 nonlinear length: 9.572495e-01

lambda: 7.590000e-05 lambdaB: 8.000000e-05 initial pulse width: 7.848788e-13 output pulse width: 5.778485e-13 dispersion length: 5.852858e-02 nonlinear length: 9.195277e-01 …

dataPath='F:\test.txt' fid=fopen(dataPath); c1='%*s %e'; % :"%"后面接一个"*"代表跳过这个数据,%*s即代表跳过第一个字符串’lambda:’,%e表示读取以科学计数 c2 = '%*s %e'; c3 = '%*s %*s %*s %e'; c4 = '%*s %*s %*s %e'; c5 = '%*s %*s %e'; c6 = '%*s %*s %e'; formatSpec=[c1,c2,c3,c4,c5,c6]; % 以6为1组,重复读取,直至读取完整个文件 A=fscanf(fid,formatSpec,[6,inf]) % "A"为变量名 fclose(fid); % 保存 savepath='F:\xi\' save(savepath,'A') 二、保存数据 %:1、保存指定的变量在 filename 指定的文件中。 save('filename', 'var1', 'var2', ...): %:2、将工作区中的所有变量保存在当前工作区中的文件中,文件名为 matlab.mat save % 3、指定保存文件的格式,格式可以为MAT文件、ASCII文件等。 save('..., 'format') savepath='F:\xi\'; filename = [savepath,'负载L0.txt']; %自己更改格式 save(filename,'Data_1','-ascii') 三、最终代码 %%============Arrange data ===========%% % 1、清除 clear; % 从工作区中删除项目,释放系统内存 clc; % 清理命令窗口 close all % 移除指定绘画 % 2、保存路径 savepath = 'D:\data\migreadte data\Data of elder brother MAO paper\experimental data\vibration signal\'; % %=====Label-1 Data----负载L0=====%% % 3、数据来源路径 Datapath='D:\data\migreadte data\Data of elder brother MAO paper\vibration signal\L0\'; % 加载数据 a=load([Datapath,'BL_CamFro_Oil2600_S100_L000_ 18-12-12 13-01-04.mat']); b=load([Datapath,'TB50_CamFro_S100_L000_ 18-12-17 17-33-45.mat']); c=load([Datapath,'TB100_CamFro_S100_L000_ 18-12-17 21-28-37.mat']); d=load([Datapath,'OS_CamFro_Oil1500_S100_L000_ 18-12-14 18-03-14.mat']); e=load([Datapath,'OS_CamFro_Oil2000_S100_L000_ 18-12-14 13-18-47.mat']); % 4、整理数据 % 把原始数据第四列,以每次L个长度放入新数组,最终生成大小为2048*100的数组 L=2048 for i=1:100 Data1(:,i) = a.Data(L*(i-1)+1:L*i,4); Data2(:,i) = b.Data(L*(i-1)+1:L*i,4); Data3(:,i) = c.Data(L*(i-1)+1:L*i,4); Data4(:,i) = d.Data(L*(i-1)+1:L*i,4); Data5(:,i) = e.Data(L*(i-1)+1:L*i,4); end % 整合数组(按列拼接),生成大小为2048*500 Data_1 = [Data1,Data2,Data3,Data4,Data5]; % 5、保存文件 savepath1=[savepath,'负载L0.mat'] save(savepath1,'Data_1')


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3