MATLAB(六)数据处理

一、Matlab中的默认数据文件mat文件

例1、把Matlab工作空间中的数据矩阵a、b、c保存到数据文件data1.mat中。

>> a = [1, 2, 3]
a =1     2     3
>> b = [4, 5, 6]
b =4     5     6
>> c = [7, 8, 9]
c =7     8     9
>> save data1 a b c

例2、把例1生成的data1.mat中的所有数据加载到Matlab工作空间中。

>> load('data1.mat')

二、纯文本文件

可以把word文档中整行整列的数据粘贴到纯文本文件,然后调入到Matlab工作空间中。

例3、把纯文本文件data2.txt加载到工作空间。

>> a = load('data2.txt')
a =1     2     3     4     56     7     8     9    10

或者用textread() 函数,加载数据到工作空间,需要注意加载数据的类型

>> a = textread('data2.txt')
a =1     2     3     4     56     7     8     9    10

如果数据不是规则的,则这两个函数的处理还是有差别的,textread()函数会自动对缺失的数据用0进行填补,而load函数直接报错;

>> a = load('data2.txt')
错误使用 load
ASCII 文件 data2.txt 的第 2 行中的列数必须与前面行中的列数相同。 
>> a = textread('data2.txt')
a =1     2     34     5     0

例4、使用dlmwrite命令把矩阵b保存到纯文本文件data3.txt中。

>> b = [1 2 3]
b =1     2     3
>> dlmwrite('data3.txt', b)

例5、生成服从标准正太分布随机数的100x200矩阵,然后用fprintf命令保存到纯文本文件data4.txt中。

clc, clear
fid = fopen('data4.txt', 'w');
a = normrnd(0, 1, 100, 200); %0,1表示的是随机数的取值范围
fprintf(fid, '%f\n', a'); % 将产生的数据a保存到打开的data4.txt文件中
fclose(fid); % 关闭data4.txt文件

 

注:对于高维矩阵用dlmwrite构造的纯文本文件,Lingo软件不识别;为了Lingo软件识别,纯文本文件必须用fprintf构造,而且数据之间的分割符为“\n”。

三、Excel文件

例6、把一个5x10矩阵写到Excel文件data5.xls表单Sheet2中B2开始的域中。

clc, clear
a = rand(5, 10);
xlswrite('data5.xls', a, 'Sheet2', 'B2')

例7、把例6生成的Excel文件data5.xls中表单Sheet2的域“C3:F6”中的数据赋值给b。

>> b = xlsread('data5.xls', 'Sheet2', 'C3:F6')
b =0.231662966604022   0.989774818941714   0.782489349911504   0.1458589734751690.209023331509194   0.722841980854519   0.646446071734880   0.7180582712878980.609870564311474   0.828393537955305   0.991485577448960   0.2874756020793170.612317772839133   0.365553588875753   0.775034954080905   0.603066961251474

四、字符串数据

例8、统计下列五行字符串中字符a、c、g、t出现的频数。

clc, clear
fid = fopen('data6.txt', 'r');
i = 1;
while(~feof(fid))data = fgetl(fid);a = sum(data == 97);b = sum(data == 99);c = sum(data == 103);d = sum(data == 116);e = sum(data >= 97 & data <= 122);f(i, :) = [a b c d e a+b+c+d];i = i + 1;
end
f
he = sum(f)
fclose(fid);
f =2     0     5     1    65     82     3     5     3    62    132     3     2     2    58     95     3     4     0    64    126     5     2     3    63    16
he =17    14    18     9   312    58

其他的一些字符串处理命令有strcmp、strfind等。

五、图像文件

例9、把一个比较大的bmp图像文件data7.bmp,转化成比较小的jpg文件,命名为data7.jpg,并显示。

clc,clear
a = imread('data7.bmp');
imshow(a)
imwrite(a, 'data7.jpg');
figure
imshow('data7.jpg')

 例10、生成10幅彩色jpg文件,依次命名为jpg1.jpg,......,jpg10.jpg。

clc,clear
for i = 1:10str = ['jpg', int2str(i), '.jpg'];a(:,:,1) = rand(500);a(:,:,2) = rand(500) + 100;a(:,:,3) = rand(500) + 200;imwrite(a, str);
end

六、数据的批处理

例11、现有数据文件book1.xls,......,book5.xls,用命令importdata读入数据。

clc,clear
n = 5;
mydata = cell(1, n);
for k = 1:nfilename = sprintf('book%d.xlsx', k); % 构造文件名的格式化字符串mydata{k} = importdata(filename); % 从文件导入数据
end
celldisp(mydata) % 显示细胞数据的数据

注意:xls文件必须是微软office创建的文件,否则,读取文件时会出现错误。 

mydata{1} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct]
mydata{2} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct]
mydata{3} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct]
mydata{4} =Sheet1: {'8iiy8u'}
mydata{5} =Sheet1: {'uykyu'  'j546'}

例12、现有数据文件book01.xls,...,book05.xls,读取各Excel文件的第1个表单(Sheet1)的域“A2:C10”的数据。

clc,clear
n = 5;
range = 'A2:C10';
sheet = 1;
myData = cell(1, n);
for k=1:nfileName = sprintf('book0%d.xls', k);myData{k} = xlsread(fileName, sheet, range);
end
celldisp(myData) % 显示细胞数组的数据
myData{1} =1     1     11     1     11     1     11     1     11     1     11     1     11     1     11     1     11     1     1
myData{2} =2     2     22     2     22     2     22     2     22     2     22     2     22     2     22     2     22     2     2
myData{3} =3     3     33     3     33     3     33     3     33     3     33     3     33     3     33     3     33     3     3
myData{4} =4     4     44     4     44     4     44     4     44     4     44     4     44     4     44     4     44     4     4
myData{5} =5     5     55     5     55     5     55     5     55     5     55     5     55     5     55     5     55     5     5

例13、读入当前目录下所有后缀名为xls的Excel文件的数据。

clc,clear
fi = dir('*.xls'); % 提出Excel文件的信息,返回值是结构数据
n = length(fi); % 计算Excel文件的个数
myData = cell(1, n);
for k = 1:nmyData{k} = importdata(fi(k).name);
end
celldisp(myData) % 显示细胞数组的数据
myData{1} =Sheet1: [9×3 double]
myData{2} =Sheet1: [9×3 double]
myData{3} =Sheet1: [9×3 double]
myData{4} =Sheet1: [9×3 double]
myData{5} =Sheet1: [9×3 double]
myData{6} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct]
myData{7} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct]
myData{8} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct]
myData{9} =Sheet1: {'8iiy8u'}
myData{10} =Sheet1: {'uykyu'  'j546'}
myData{11} =Sheet2: [5×10 double]

七、时间序列数据

例14、时间序列数据的处理

clc,clear
randn('seed', sum(100*clock)); % 初始化随机数发生器
a = randn(6, 1); % 生成服从标准正太分布的伪随机数
b = [today:today+5]' % 从今天到后面5天
fts = fints(b,a) % 生成fints格式数据
fts(3) = NaN; % 将第三个数据变为缺失值
newdata = fillts(fts, 'linear') % 用线性插值填补时间序列中的缺失数据
data = fts2mat(newdata) % 时间序列数据转为普通数据
b =737538737539737540737541737542737543fts = desc:  (none)freq:  Unknown (0)'dates:  (6)'    'series1:  (6)'     '23-Apr-2019'    [ 0.886860381620918]'24-Apr-2019'    [ 0.460999512887512]'25-Apr-2019'    [-0.215670586672620]'26-Apr-2019'    [-0.009709957146119]'27-Apr-2019'    [-0.726552476730568]'28-Apr-2019'    [ 0.090572270848305]newdata = desc:  Filled freq:  Unknown (0)'dates:  (6)'    'series1:  (6)'     '23-Apr-2019'    [ 0.886860381620918]'24-Apr-2019'    [ 0.460999512887512]'25-Apr-2019'    [ 0.225644777870696]'26-Apr-2019'    [-0.009709957146119]'27-Apr-2019'    [-0.726552476730568]'28-Apr-2019'    [ 0.090572270848305]
data =0.8868603816209180.4609995128875120.225644777870696-0.009709957146119-0.7265524767305680.090572270848305

例15、对于Matlab当前工作路径下所有时间序列型的纯文本文件,进行相关的数据操作。

clc,clear
tf = dir('*.txt') % 提出纯文本文件的信息,返回值是结构数据
n = length(tf); % 计算纯文本文件的个数
fts = ascii2fts(tf(1).name); % 读第一个文件中的时间序列数据
fts = extfield(fts, {'series2', 'series3'}); % 提出第二个字段和第三个字段
for i=2:ntp1 = ascii2fts(tf(i).name); % 读取时间序列数据tp2 = extfield(fts, {'series2', 'series3'}); % 提出第2,3字段str1 = ['series', num2str(2*i)];str2 = ['series', num2str(2*i+1)];tp3 = fints(tp2.dates, fts2mat(tp2), {str1,str2}); % 把时间序列改名fts = merge(fts, tp3); % 合并两个时间序列的数据
end
fts % 显示合并提出的两个字段数据

八、日期和时间

Matlab日期和时间的函数有datenum,datevec,datestr,now,clock,date,calendar,eomday,weekday,addtodate,etime等,这里就不一一说明各个函数的用法了,下面举例说明有关函数的使用。

例16、统计1601年1月到2000年12月,每月的13日分别出现在星期日、星期一、星期二,...,星期六的频数,并画出对应的柱状图。注:Matlab中weekday的1对应“星期日”,2对应“星期一”,......,7对应“星期六”。

clc,clear
c = zeros(1,7);
for y=1601:2000for m=1:12d = datenum(y, m, 13);w = weekday(d);c(w) = c(w) + 1;end
end
c,bar(c) %显示频数并画出频数的柱状图
axis([0 8 680 690])
line([0, 8], [4800/7, 4800/7], 'linewidth', 4, 'color', 'k')
set(gca, 'xticklabel', {'Su', 'M', 'Tu', 'W', 'Th', 'F', 'Sa'})
c =687   685   685   687   684   688   684

九、视频文件

        Matlab除了支持各种图像文件的读写等操作,还支持视频文件的相应处理。实际上,视频文件本质上是由多帧具有一定大小、顺序、格式的图像组成的,只是一般的图像是静止的,而视频是可以将多帧静止的图像进行连续显示,从而达到动态效果。

例17、读取一个视频文件text.mp4,并把视频中的每一帧保存成jpg文件。

clc,clear
ob = VideoReader('test.mp4')  % 读取视频文件对象
get(ob) % 获取视频对象的参数
n = ob.NumberOfFrame; % 获取视频的总帧数
for i = 1:na = read(ob, i); % 读取视频对象的第i帧imshow(a)  % 显示第i帧图像str = ['source\', int2str(i), '.jpg']; % 构造文件名的字符串,目录source要提前建好imwrite(a, str); % 把第i帧保存到jpg文件
end
ob = VideoReader (具有属性):常规属性:Name: 'test.mp4'Path: 'D:\matlab_workspace\文件夹3\数据处理'Duration: 9.945333000000000CurrentTime: 0Tag: ''UserData: []视频属性:Width: 320Height: 176FrameRate: 25BitsPerPixel: 24VideoFormat: 'RGB24'
obj = VideoReader (具有属性):常规属性:Name: 'test.mp4'Path: 'D:\matlab_workspace\文件夹3\数据处理'Duration: 9.945333000000000CurrentTime: 0Tag: ''UserData: []视频属性:Width: 320Height: 176FrameRate: 25BitsPerPixel: 24VideoFormat: 'RGB24'

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java怎么安装_Windows、Linux、Mac下安装JDK

前言在知乎上看到很多童鞋在学Java的时候&#xff0c;因为安装jdk时没有正确的配置&#xff0c;会遇到很多问题。所以决定今天写一下jdk在Windows、Mac、Linux下都怎么安装。下载JDK“巧妇难为无米之炊”&#xff0c;所以首先我们要去Oracle官网上下载jdk&#xff0c;Java8下载…

200年历史的神经科学难题,取得重大突破

图片来源&#xff1a;Diogo Matias&#xff0c;Champalimaud基金会来源&#xff1a;中国生物技术网北京时间8月13日&#xff0c;发表在《Nature Neuroscience》上的一项研究&#xff0c;来自葡萄牙里斯本Champalimaud未知中心的研究团队解决了一个长达200年历史的神经科学难题。…

关系数据库SQL之可编程性触发器

前言 前面关系数据库SQL之可编程性函数&#xff08;用户自定义函数&#xff09;一文提到关系型数据库提供了可编程性的函数、存储过程、事务、触发器及游标&#xff0c;前文已介绍了函数、存储过程、事务&#xff0c;本文来介绍一下触发器的使用。(还是以前面的银行系统为例) 概…

图像处理:图像特效之油画效果

利用OpenCVpython对图片进行处理产生油画的效果 算法可以分为五步&#xff1a; 1、获取图像的灰度(gray)图片2、设计一个小方框&#xff08;4x4 or 8x8 or 10x10等&#xff09;&#xff0c;统计每个小方框的像素值3、将0-255的灰度值划分成几个等级&#xff0c;并把第二步处理…

socket模拟http的登陆_python模拟登陆知乎(最新版)

为啥要写这一篇文章呢&#xff1f;&#xff08;主要是qq群内有人在模拟登陆知乎&#xff0c;一直不成功&#xff09;然后我抓包看了下&#xff0c;发现知乎登陆页已经改版了&#xff0c;而且难度大大提高了。开始抓包首先内&#xff0c;还是打开知乎首页&#xff0c;然后输入账…

基于wrapper的特征选择——递归特征消除RFE的python实现

class sklearn.feature_selection.RFE(estimator, *, n_features_to_selectNone, step1, verbose0) https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html?highlightrfe#sklearn.feature_selection.RFE estimator&#xff1a;用于特征选…

图像识别:利用KNN实现手写数字识别(mnist数据集)

图像识别&#xff1a;利用KNN实现手写数字识别&#xff08;mnist数据集&#xff09; 步骤&#xff1a; 1、数据的加载&#xff08;trainSize和testSize不要设置的太大&#xff09; 2、k值的设定&#xff08;不宜过大&#xff09; 3、KNN的核心&#xff1a;距离的计算 4、k个最近…

寻找数组中第K频繁的元素

问题是&#xff1a;给你一个数组&#xff0c;求解出现次数第K多的元素。当然leetcode上的要求是算法复杂度不能大于O(N*logN)。 首先这个问题我先是在leetcode上看到&#xff0c;当时想了两种做法&#xff0c;做到一半都觉得不是很好&#xff0c;正在思考别的方法。然后在牛客网…

一个与生命起源有关的悖论终于得到了解决

来源&#xff1a;原理当Caitlin Cornell低头看显微镜时&#xff0c;她看见黑色的背景下浮现出一些大大的明亮斑点。它们就像微缩的太阳&#xff0c;在深色的太空幕布下闪耀着光芒。Conell回忆起把这些斑点展示给她的导师Sarah Keller时的兴奋&#xff0c;那时她们意识到&#x…

python ffmpy3与FFmpeg的安装

python ffmpy3与FFmpeg的安装 安装命令&#xff1a; pip install ffmpy3 去官网下载FFmpeg&#xff0c;根据自身电脑版本下载相应安装包 http://ffmpeg.org/download.html from ffmpy3 import FFmpeg ff FFmpeg(inputs{test.mp4: None},outputs{output.ts: None}) print(f…

千兆网线8根线定义图_家中的网线断裂/不够长,如何接线才最合适?

网线作为互联网时代不可或缺的主角&#xff0c;更是家装布线和工程施工中的常客。网线相对来说是很脆弱的&#xff0c;特别是一些质量一般的网线&#xff0c;在很多情况下都可能会被弄断&#xff0c;比如老鼠咬、过度拉伸、摆在地下人踩的人多了、电起火烧断、不小心被夹断等等…

中国决定以“六大政策”推动新一代人工智能发展

来源&#xff1a;智造智库以新一代人工智能为代表的新一轮科技革命和产业变革已经呈现出强大的影响力和生命力&#xff0c;人工智能技术对生产、流通、消费等形成高度渗透、跨界融合&#xff0c;新业态、新模式不断涌现&#xff0c;给以往的产业生态、社会分工、行业和企业边界…

第三次站立会议

项目进展&#xff1a;项目主体开始实施&#xff0c;我们在前期分工准备的同时开始讨论连连看的具体式样&#xff0c;开始上网参考其他项目的式样&#xff0c;搜集图片素材&#xff0c;为具有我们特色的连连看项目做准备。 存在问题&#xff1a;搜集素材时组员对项目的风格式样见…

ffmpy3与ffmpeg的简单使用

安装 python ffmpy3与ffmpeg的安装 https://blog.csdn.net/qq_40962368/article/details/90748852 ffmpy3的介绍&#xff1a; https://ffmpy3.readthedocs.io/en/latest/ ffmpy3是一个用于FFmpeg的Python包装器&#xff0c;最初是从ffmpy项目派生出来的。它根据提供的参数及…

C++ vector查找某个特定元素是否存在

使用find()函数需要#include<algorithm> if (std::find(v.begin(), v.end(), key) ! v.end()) 从find函数的返回结果与vector的end比较可以看出其实这是一个指针&#xff0c;那么如果我们想要获得索引那么将返回结果与begin做差即可 find(v.begin(), v.end(), key)-v…

python列表应用案例-python列表使用实例

#以下是我自己在联系列表中所编写的语句&#xff1a; names["zangsan","lisi","wangermazi","Xiaoliuzi","dabiaoge","牛erbiaodi"] #----------0--------1---------2---------------3----------4---------5-----…

边工作边刷题:70天一遍leetcode: day 7

Max Points on a Line 要点&#xff1a;这题暴力解是用任何两点确定一条直线&#xff0c;然后对其他点检查是否共线&#xff0c;显然&#xff0c;这里没用空间来存储之前的检查结果&#xff0c;所以time complexity是O(n^3)。这题的难点是如何存储从而实现O(n^2)解。思路是另一…

5G将改变技术格局的8个原因(上)

来源&#xff1a;CESAsia5G是引领第四次工业革命的通用技术。为了说明5G如何推动技术创新的飞跃&#xff0c;威讯(Verizon)首席执行官卫翰思(Hans Vestberg)在2019年国际消费电子产品展(CES 2019)主题演讲中罗列了5G所带来的八项有可能改变世界的能力。通用能力1和2&#xff1a…

python计算precision,recall,f1-score

sklearn.metrics.classification_report(y_true, y_pred, *, labelsNone, target_namesNone, sample_weightNone, digits2, output_dictFalse, zero_divisionwarn) https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html