技术标签: matlab Matlab从入门到开发
本章包含以下内容
通过数据导入和导出功能,可以从文件、其他应用程序、Web 服务和外部设备访问数据。可以读取常见文件格式,如 Excel电子表格、文本、图像、音频和视频,以及科学数据格式。通过一些低级的文件 I/O 函数,可以处理任何格式的数据文件。
主要包含以下格式的文件 :文本、电子表格、图像、科学数据、音频和视频、XML 文档
函数 | 功能 |
---|---|
readtable | 基于文件创建表 |
writetable | 将表写入文件 |
readtimetable | 基于文件创建时间表 |
writetimetable | 将时间表写入文件 |
函数 | 功能 |
---|---|
detectImportOptions | 基于文件内容生成导入选项 |
delimitedTextImportOptions | 为带分隔符的文本导入选项对象 |
fixedWidthImportOptions | 等宽文本文件的导入选项对象 |
getvaropts | 获取变量导入选项 |
setvaropts | 设置变量导入选项 |
setvartype | 设置变量数据类型 |
preview | 使用导入选项预览文件中的八行数据 |
函数 | 功能 |
---|---|
readmatrix | 从文件中读取矩阵 |
writematrix | 将矩阵写入文件 |
readcell | 从文件中读取元胞数组 |
writecell | 将元胞数组写入文件 |
readvars | 从文件中读取变量 |
textscan | 从文本文件或字符串读取格式化数据 |
type | 显示文件内容 |
fileread | 以文本格式读取文件内容 |
函数 | 功能 |
---|---|
tabularTextDatastore | 表格文本文件的数据存储 |
样本文件概述
样本文件 outages.csv 包含表示美国电力中断的数据。文件的前几行如下:
Region,OutageTime,Loss,Customers,RestorationTime,Cause
SouthWest,2002-01-20 11:49,672,2902379,2002-01-24 21:58,winter storm
SouthEast,2002-01-30 01:18,796,336436,2002-02-04 11:20,winter storm
SouthEast,2004-02-03 21:17,264.9,107083,2004-02-20 03:37,winter storm
West,2002-06-19 13:39,391.4,378990,2002-06-19 14:27,equipment fault
读取文本文件
使用 readtable 导入数据,并显示前五行。readtable 函数会自动检测分隔符和变量类型。
T = readtable('outages.csv');
head(T,5) % show first 5 rows of table
ans=5×6 table
Region OutageTime Loss Customers RestorationTime Cause
'SouthWest' 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 'winter storm'
'SouthEast' 2003-01-23 00:49 530.14 2.1204e+05 NaT 'winter storm'
'SouthEast' 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 'winter storm'
'West' 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 'equipment fault'
'MidWest' 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 'severe storm'
在导入之前指定变量数据类型根据文件中的变量类型,将变量数据类型更新为相应的 MATLAB 数据类型可能有益于数据。例如,outages.csv 中的第一列和第六列为分类列。通过将这两个列指定为 categorical 数组,可以运用 MATLAB 函数处理分类数据。要指定变量的数据类型,有如下方法可以选择:
指定 readtable 中的 Format 名称-值对组
设置文件导入选项的 VariableTypes 属性
使用 Format 名称-值对组指定变量的数据类型,读取数据,并显示前五行数据。在 formatSpec 设定符的 %{yyyy-MM-dd HH:mm}D 部分中,花括号之间的文本描述了日期和时间数据的格式。Format 中指定的值指定了:
文件中的第一列和最后一列为分类数据
第二列和第五列为格式化的日期和时间数据
第三列和第四列为浮点值
formatSpec = '%C%{yyyy-MM-dd HH:mm}D%f%f%{yyyy-MM-dd HH:mm}D%C';
T = readtable('outages.csv','Format',formatSpec);
head(T,5)
ans=5×6 table
Region OutageTime Loss Customers RestorationTime Cause
_________ ________________ ______ __________ ________________ _______________
SouthWest 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 winter storm
SouthEast 2003-01-23 00:49 530.14 2.1204e+05 NaT winter storm
SouthEast 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 winter storm
West 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 equipment fault
MidWest 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 severe storm
或者,通过使用导入选项的 setvartype 函数,指定变量的数据类型。首先,为文件创建一个导入选项对象。数据文件包含了不同类型的变量。指定第一个和最后一个变量为 categorical 数组,第二个和第五个变量为 datetime 数组,剩余变量为 double。
opts = detectImportOptions('outages.csv');
varNames = opts.VariableNames ; % variable names
varTypes = {
'categorical','datetime','double',...
'double','datetime','categorical'};
opts = setvartype(opts,varNames,varTypes);
将 readtable 与 opts 配合使用以导入数据,然后显示前五行。
T = readtable('outages.csv',opts);
head(T,5)
ans=5×6 table
Region OutageTime Loss Customers RestorationTime Cause
_________ ____________________ ______ __________ ____________________ _______________
SouthWest 01-Feb-2002 12:18:00 458.98 1.8202e+06 07-Feb-2002 16:50:00 winter storm
SouthEast 23-Jan-2003 00:49:00 530.14 2.1204e+05 NaT winter storm
SouthEast 07-Feb-2003 21:15:00 289.4 1.4294e+05 17-Feb-2003 08:14:00 winter storm
West 06-Apr-2004 05:44:00 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault
MidWest 16-Mar-2002 06:18:00 186.44 2.1275e+05 18-Mar-2002 23:23:00 severe storm
将新变量追加到表中
表 T 中包含了 OutageTime 和 RestorationTime。计算每次电力中断的持续时间并将此数据追加到表中。
T.Duration = T.RestorationTime - T.OutageTime;
head(T,5)
ans=5×7 table
Region OutageTime Loss Customers RestorationTime Cause Duration
_________ ____________________ ______ __________ ____________________ _______________ _________
SouthWest 01-Feb-2002 12:18:00 458.98 1.8202e+06 07-Feb-2002 16:50:00 winter storm 148:32:00
SouthEast 23-Jan-2003 00:49:00 530.14 2.1204e+05 NaT winter storm NaN
SouthEast 07-Feb-2003 21:15:00 289.4 1.4294e+05 17-Feb-2003 08:14:00 winter storm 226:59:00
West 06-Apr-2004 05:44:00 434.81 3.4037e+05 06-Apr-2004 06:10:00 equipment fault 00:26:00
MidWest 16-Mar-2002 06:18:00 186.44 2.1275e+05 18-Mar-2002 23:23:00 severe storm 65:05:00
将表、元胞数组或数值数组中包含的表格数据从 MATLAB 工作区导出到文本文件。
可使用 writetable 函数将表格数据从 MATLAB 工作区导出到文本文件。创建样本表,将表写入文本文件,然后指定更多选项并再次将表写入文本文件。
创建包含变量 Pitch、Shape、Price 和 Stock 的样本表 T。
Pitch = [0.7;0.8;1;1.25;1.5];
Shape = {
'Pan';'Round';'Button';'Pan';'Round'};
Price = [10.0;13.59;10.50;12.00;16.69];
Stock = [376;502;465;1091;562];
T = table(Pitch,Shape,Price,Stock)
T=5×4 table
Pitch Shape Price Stock
_____ ________ _____ _____
0.7 'Pan' 10 376
0.8 'Round' 13.59 502
1 'Button' 10.5 465
1.25 'Pan' 12 1091
1.5 'Round' 16.69 562
将表 T 导出到一个名为 tabledata.txt 的文本文件。查看文件的内容。默认情况下,writetable 会写入逗号分隔的数据,将表变量名称作为列标题。
writetable(T,'tabledata.txt');
type tabledata.txt
Pitch,Shape,Price,Stock
0.7,Pan,10,376
0.8,Round,13.59,502
1,Button,10.5,465
1.25,Pan,12,1091
1.5,Round,16.69,562
创建表 T2,使用 RowNames 名称-值对组参数指定行名称。
rowNames = {
'M4';'M5';'M6';'M8';'M10'};
T2 = table(Pitch,Shape,Price,Stock,'RowNames',rowNames)
T2=5×4 table
Pitch Shape Price Stock
_____ ________ _____ _____
M4 0.7 'Pan' 10 376
M5 0.8 'Round' 13.59 502
M6 1 'Button' 10.5 465
M8 1.25 'Pan' 12 1091
M10 1.5 'Round' 16.69 562
将 T2 导出到名为 tabledata2.txt 并以制表符分隔的文本文件。使用 Delimiter 名称-值对组参数指定制表符分隔符,并使用 WriteRowNames 名称-值对组参数以包括行名称。查看文件的内容。
writetable(T2,'tabledata2.txt','Delimiter','\t','WriteRowNames',true);
type tabledata2.txt
Row Pitch Shape Price Stock
M4 0.7 Pan 10 376
M5 0.8 Round 13.59 502
M6 1 Button 10.5 465
M8 1.25 Pan 12 1091
M10 1.5 Round 16.69 562
将元胞数组导出到文本文件
打开实时脚本
可采用以下方法之一,将元胞数组从 MATLAB 工作区导出到文本文件:
使用 writecell 函数将元胞数组导出到文本文件。
通过指定输出数据的格式,使用 fprintf 导出元胞数组。
创建样本元胞数组 C。
C = {
'Atkins',32,77.3,'M';'Cheng',30,99.8,'F';'Lam',31,80.2,'M'}
C = 3×4 cell array
{
'Atkins'} {
[32]} {
[77.3000]} {
'M'}
{
'Cheng' } {
[30]} {
[99.8000]} {
'F'}
{
'Lam' } {
[31]} {
[80.2000]} {
'M'}
使用 writecell 导出元胞数组。
writecell(C,'data.dat')
查看文件的内容。
type data.dat
Atkins,32,77.3,M
Cheng,30,99.8,F
Lam,31,80.2,M
或者,使用 fprintf 导入元胞数组。打开一个可供写入的名为 celldata.dat 的文件。使用格式设定符定义 formatSpec,以描述文件中的数据模式。典型的格式设定符包括:表示字符向量的 ‘%s’,表示整数的 ‘%d’ 或者表示浮点数的 ‘%f’。使用空格分隔每个格式设定符,以指示对输出文件使用空格分隔符。在每行数据的末尾包括换行符 (’\n’)。
fileID = fopen('celldata.dat','w');
formatSpec = '%s %d %2.1f %s\n';
确定 C 的大小,并使用 fprintf 函数一次导出一行数据。然后关闭文件。fprintf 将写入一个空格分隔的文件。
[nrows,ncols] = size(C);
for row = 1:nrows
fprintf(fileID,formatSpec,C{
row,:});
end
fclose(fileID);
查看文件的内容。
type celldata.dat
Atkins 32 77.3 M
Cheng 30 99.8 F
Lam 31 80.2 M
将数值数组导出到文本文件
打开实时脚本
可使用 writematrix 将数值数组导出到文本文件。
创建数值数组 A。
A = magic(5)/10
A = 5×5
1.7000 2.4000 0.1000 0.8000 1.5000
2.3000 0.5000 0.7000 1.4000 1.6000
0.4000 0.6000 1.3000 2.0000 2.2000
1.0000 1.2000 1.9000 2.1000 0.3000
1.1000 1.8000 2.5000 0.2000 0.9000
将该数值数组写入到 myData.dat,并将分隔符指定为 ‘;’。然后,查看文件的内容。
writematrix(A,'myData.dat','Delimiter',';')
type myData.dat
1.7;2.4;0.1;0.8;1.5
2.3;0.5;0.7;1.4;1.6
0.4;0.6;1.3;2;2.2
1;1.2;1.9;2.1;0.3
1.1;1.8;2.5;0.2;0.9
文章浏览阅读85次。https://blog.csdn.net/csy17729158342/category_11970648.html 滤波:特定波段频率滤除插入损耗:50欧姆系统下测量,插损越大越好,滤波前的电压比滤波后的电压。共模阻抗100欧姆,差模阻抗50欧姆简单的滤波电路:电感与源负阻抗分压,电感靠近低阻抗;电容分流,靠近高阻抗。由插损来判断滤波电路是否有效,滤波电容放在高阻有效,电感放低阻有效。24V电机驱动,Re超标,红色差模,蓝色共模,电机线圈为感性,认为为高阻态,机壳加接地电容。电机线圈为感性,认为为高阻态
文章浏览阅读9.1k次,点赞16次,收藏110次。介绍:1.在 Matlab 中,用大写字母 D 表示导数,Dy 表示 y 关于自变量的一阶导数,D2y 表示 y 关于自变量的二阶导数,依此类推.函数 dsolve 用来解决常微分方程(组)的求解问题,调用格式为 X=dsolve(‘eqn1’,’eqn2’,…)如果没有初始条件,则求出通解,如果有初始条件,则求出特解系统缺省的自变量为 t。2..._"matlab求解微分方程)\"=1+2 y ', y (0)=2, y '(0)= l 的解:2.用循环求解法找出满足∑ i >1000的最小 m 值。"
文章浏览阅读750次。公司项目要求解析出RESTFull风格发布的WebService接口的所有请求方法,参数,参数类型,已经方法是返回类型,想来想去都不知道该怎么办,思来想去然后又研究RESTFull风格WebService的xml文件,发现其实对于Java简单类型的 方法是能在xml文件中体现的,但是对于复杂类型,比如参数是一个对象,或者返回值是一个对象或者List,Map等。这些返回类型在xml文件中的 resp_restfullwebservice发布
文章浏览阅读7.8k次,点赞17次,收藏90次。START第一先连接上数据库在项目文件的setting里找到DATABASESENGINE :数据库服务器(这里可以看我另一篇文章)NAME: 数据库的名字USER :连接数据库的用户PASSWORD :连接数据库的用户密码HOST :连接主机的数据库服务器PORT: 连接数据库时使用的端口第二设置数据库模型(models.py)找到你的项目,右键,找到open in terminal在打开的命令行里输入python manage.py inspectdb#输入这段代码是为_python将数据库内容写入前端
文章浏览阅读192次。本文是对上一篇打包文章的补充,后台好多人私信我说打包的版本号如何设置,今天出个补充说明。
文章浏览阅读259次,点赞10次,收藏5次。先整理在这里吧,递归说简单也简单,说难也真难。供参考。
文章浏览阅读2.2k次。 算法思想:定义两个指针,pFast和pSlow,都指向头结点,pFast先后移k-1位,使pFast指向第k个结点,此时pSlow就是相对pFast的倒数第k个结点。然后同时后移,当pFast走到表尾时,pSlow正好指向倒数第k个结点。然后将pSlow指向的结点删除。 删除单链表中的倒数第k个结点,首先要确定倒数第k个结点的位置。//查找指向链表中的倒数第k个结点的指针..._删除单链表倒数第k个结点
文章浏览阅读1.9k次。开发环境:RT-Thread版本:4.0.3操作系统:Windows10Keil版本:V5.30RT-Thread Studio版本:2.0.1开发板MCU:STM32F746ZGT6U(NUCLEO-F746ZG开发板)前面是通过以太网进行网络连接,本文将讲解Wifi联网。4.1 RW007联网4.1.1 RW007简介RW007 是由上海睿赛德电子科技有限公司开发的高速 WiFi 模块,模块基于 Realtek RTL8710BN(Ameba Z 系列) WIFI SOC,使用 SPI_lwip ethernet link down
文章浏览阅读1.8k次。主要用于贴图1、用图片实现按钮2、按钮控件属性设置为不可视代码如下:BOOL CLoginDlg::PreTranslateMessage(MSG* pMsg){ // TODO: 在此添加专用代码和/或调用基类 if (pMsg->message == WM_LBUTTONDOWN) { //获取按钮的区域 CRect rect,rc; m_Ok.GetWindowRe..._vc++ pretranslatemessage
文章浏览阅读1.1w次,点赞38次,收藏237次。粒子群优化BP神经网络初始权值(python实现)网上看了一些资料,但都是用matlab写的,(还要用csdn会员积分下载)自己不太会用matlab,就试着用python写了段小程序实现,数据用的是sklearn中的波士顿房价数据集,神经网络部分是用tensorflow2。(本来想用sklearn,但不知道怎么把网络权值提取出来)思路挺简单的,就是把BP网络误差作为粒子群优化的目标,每个粒子对应网络权重,一轮一轮的迭代。(先是在一篇建模论文里看到了这个想法,虽然好像没啥实用价值)大一,只会捏泥巴,各位_python sklearn 蚁群 优化bp
文章浏览阅读239次。----入门篇---- 入门知识 http://www.cnoug.org/viewthread.php?tid=17449&h=1 Oracle 的入门心得-->强烈推荐 http://w..._oracle 配置一个新org应如何配置
文章浏览阅读1.5w次。笔者的笔记本电脑是ThinkPad T420。用Logitech(罗技) M555b鼠标已经有一年多的时间了,不过之前一直是在win7 32位系统下使用的,用了能有一年多的时间,一直很稳定,没有出现过任何问题。 最近买了一条内存,加上原来的内存一共是8G。32位系统识别不出这么多内存,没有办法,只能安装64位系统。安装过程一切顺利,没有出现过什么问题。但是所有程序都安装完成,在使用电脑的过程_罗技m555b最简单处理方法