导图社区 matlab文件操作
matlab文件操作 matlab
编辑于2020-06-05 23:36:37matlab文件操作
1、数据导入
一般用于数据分析的数据规模较大,在分析数据之前,要把数据导入到Matlab 工作区。
单击File 菜单下的Import Data子菜单,打开导入窗口,可以把数据导入到workspace 中。
2、数据保存(save 命令)
使用save命令用于将活动交互环境中的变量保存到指定文件名的文件, 创建二进制的.mat文件,包含变量名,大小和存储在矩阵中的数据。
Save filename %把工作区中所有变量列表(filename自己命名)
Save filename variable1 variable2…
例如:
clear
>> x=0.5;y=4*x;
>> save xyfile
>> save xfile x
ascii格式的save命令用来创建纯文本文件,可以用文本编辑器打开,它保存的只是矩阵中元素的值
Save filename variable1 variable2…-ascii
例如
x=0:5;y=5*x;
>> xy=[x',y'];
>> save xyvals.txt xy -ascii (文件名+扩展名+保存的变量名+-ascii)
当变量还要读入Matlab时,使用.mat形式,它创建的变量是结构体, 当变量要输出到其他程序,如电子表格和文字处理时,使用ascii格式,它创建的变量是一个矩阵.
3、文件的打开
(1) open
不同类型文件后缀名不同,如filename.m#####filename.mat(数据文件), #####filename.pdf(pdf文件), #####filename.fig(图形文件)
使用格式:open('filename.扩展名'): %打开文件filename。
打开当前路径上的文件,可以直接用open函数打开
例如
open 学位论文评议书.pdf
open('学位论文评议书.pdf')
open('图形.fig')
open('论文答辩.ppt')
如果文件不在当前路径上,打开它需要指定路径名,例如:
open('D:\temp\data.mat')
(2) load
load 命令与save命令是成对的,load命令把数据读入matlab中。
用法
>>load filename %filename.mat被打开,其中的变量被载入工作区
>>load filename var1 var2 % %filename.mat被打开,其中的变量var1 var2被载入工作区
load(‘filename’) %这里filename可以是mat格式文件或纯文本文件(扩展名是.mat或.txt)
例:
代码
clear >> x=linspace(0,2*pi); y=cos(x);z=sin(x); >> save trigvar %创建trigvar.mat文件 >> clear >> whos %在matlab中whos用于列出当前工作空间中所有变量,以及它们的名字、尺寸(比如一个矩阵或数组的行列维数)、所占字节数、属性等信息。 >> load trigvar >> whos Name Size Bytes Class Attributes x 1x100 800 double y 1x100 800 double z 1x100 800 double D=load('trigvar') %当文件是.mat格式,D是一个结构体(区别在于有D接,∴可以直接显示) D = x: [1x100 double] y: [1x100 double] z: [1x100 double] C=load('xyvals.txt') %当文件是纯文本文件时,C是包含文件中所有数据的矩阵 C = 0 0 1 5 2 10 3 15 4 20 5 25
练习:在记事本中建立一个数据文件,使用load导入到matlab 中,注意路径。
注:load 命令的一个重要应用是从纯文本文件中读入数据进行分析和画图。此时,要求文件中各列等长,且各列中的数据都是数字。不可以包括文本,如列标题。
实际应用例子
在NMM(Numerical Methods with MATLAB)工具箱(http://web.cecs.pdx.edu/~gerry/nmm/mfiles/)中的data目录下的文件文件pdxTemp.dat是已有的一个文件,它包含俄勒冈州波特兰市的历史平均气温 >> type pdxTemp.dat 1 45.36 33.84 39.60 %第一列为月份,第二列到第四列 2 50.87 35.98 43.43 分别是平均最高气温、平均最低气温、 3 56.05 38.55 47.30 和每月的平均温度。 4 60.49 41.36 50.92 5 67.17 46.92 57.05 6 73.82 52.80 63.31 7 79.72 56.43 68.07 8 80.14 56.79 68.47 9 74.54 51.83 63.18 10 64.08 44.95 54.52 11 52.66 39.54 46.10 12 45.59 34.75 40.17 在命令窗口中进行如下操作: D=load('pdxTemp.dat') >>D = 1.0000 45.3600 33.8400 39.6000 2.0000 50.8700 35.9800 43.4300 3.0000 56.0500 38.5500 47.3000 4.0000 60.4900 41.3600 50.9200 5.0000 67.1700 46.9200 57.0500 6.0000 73.8200 52.8000 63.3100 7.0000 79.7200 56.4300 68.0700 8.0000 80.1400 56.7900 68.4700 9.0000 74.5400 51.8300 63.1800 10.0000 64.0800 44.9500 54.5200 11.0000 52.6600 39.5400 46.1000 12.0000 45.5900 34.7500 40.1700 >> month=D(:,1); %拷贝第一列到month------(:,1)以此来提取列 >> T=D(:,2:4) %拷贝第二到四列到T----------(:,2:4)matlab中的n---m的表示方法 T = 45.3600 33.8400 39.6000 50.8700 35.9800 43.4300 56.0500 38.5500 47.3000 60.4900 41.3600 50.9200 67.1700 46.9200 57.0500 73.8200 52.8000 63.3100 79.7200 56.4300 68.0700 80.1400 56.7900 68.4700 74.5400 51.8300 63.1800 64.0800 44.9500 54.5200 52.6600 39.5400 46.1000 45.5900 34.7500 40.1700 >> Thigh_max=max(T(:,1)) Thigh_max = 80.1400 >> Tlow_min=min(T(:,2)) Tlow_min = 33.8400 >> Tave_ave=mean(T(:,3)) Tave_ave = 53.5100 >> whos Name Size Bytes Class Attributes D 12x4 384 double T 12x3 288 double Tave_ave 1x1 8 double Thigh_max 1x1 8 double Tlow_min 1x1 8 double
4、低级输入/输出函数
load,save可以看成高级函数,用户只要输入简单的语句,系统就能接受或传送数据。但它不能控制操作的细节。例如,当文件存放在纯文本文件中,有列标题时,不能使用load.
例:
>> type pdxThead.dat month high low ave 1 45.36 33.84 39.6 2 50.87 35.98 43.43 3 56.05 38.55 47.3 4 60.49 41.36 50.92 5 67.17 46.92 57.05 6 73.82 52.8 63.31 7 79.72 56.43 68.07 8 80.14 56.79 68.47 9 74.54 51.83 63.18 10 64.08 44.95 54.52 11 52.66 39.54 46.1 12 45.59 34.75 40.17 >> load pdxThead.dat 错误使用 load…
>>type H2Odensity.dat Density of saturated liquid water T(C) rho(kg/m^3) 0 999.9 5 1000.0 10 999.7 20 998.2 30 995.7 40 992.2 50 988.1 60 983.2 70 977.8 80 971.8 90 965.3 100 958.4 >> load H2Odensity.dat 错误使用 load…
此时,要使用低级I/O函数。一般格式:
fid=fopen(filename,permission)
fid是文件标识符,当打开文件成功时,返回正数,否则返回-1。
Permission是字符串,表示对文件许可的操作。
‘rt’:打开文件进行读操作。
‘wt’:打开文件进行写操作,文件不存在时,先创建再写;已经存在时将原来内容覆盖。
‘a’:打开文件进行追加操作,文件不存在时,先创建再追加,已经存在时,直接追加在文件末尾。
line=fgetl(fid) %打开文件的一行
x=fscanf(fid,format) %从文件中读取格式化数据,format是字符串,表示给变量x赋值的转换格式
%s :格式化为字符串
%d:格式化为整数
%f:格式化为浮点数
%g:格式化为%e或%f简化格式
%e:格式化为科学记数法的浮点数
\n:换行
\t:插入制表符
例
fid=fopen('pdxThead.dat','rt'); %打开文件进行读 >> headings=fgetl(fid) %读取文件的第一行,如再调用一次,读第二行 headings = month high low ave >> d=fscanf(fid,'%f'); (第一行读取完,则读取后面的) >> fclose(fid) %关闭文件 ans = 0 >> d=reshape(d,[4,12])' d = 1.0000 45.3600 33.8400 39.6000 2.0000 50.8700 35.9800 43.4300 3.0000 56.0500 38.5500 47.3000 4.0000 60.4900 41.3600 50.9200 5.0000 67.1700 46.9200 57.0500 6.0000 73.8200 52.8000 63.3100 7.0000 79.7200 56.4300 68.0700 8.0000 80.1400 56.7900 68.4700 9.0000 74.5400 51.8300 63.1800 10.0000 64.0800 44.9500 54.5200 11.0000 52.6600 39.5400 46.1000 12.0000 45.5900 34.7500 40.1700 >> m=d(:,1); >> T=d(:,2:4) T = 45.3600 33.8400 39.6000 50.8700 35.9800 43.4300 56.0500 38.5500 47.3000 60.4900 41.3600 50.9200 67.1700 46.9200 57.0500 73.8200 52.8000 63.3100 79.7200 56.4300 68.0700 80.1400 56.7900 68.4700 74.5400 51.8300 63.1800 64.0800 44.9500 54.5200 52.6600 39.5400 46.1000 45.5900 34.7500 40.1700
fprintf(fid, format, data): 将数据按指定格式写入到文本文件中。
fid表示由fopen函数打开的文件句柄,如果fid省略,则直接输出在屏幕上。
format
%c 单个字符
%d 有符号十进制数(%i也可以)
%u 无符号十进制数
%f 浮点数(%8.4f表示对浮点数取8位宽度,同时4位小数)
%o 无符号八进制数
%s 字符串
%x 小写a-f的十六进制数
%X 大写a-f的十六进制数
例1: 在D盘创建char1.txt进行写操作,将字符串‘string’写入到文本文件中。
>>a='string'; >> fid=fopen('d:\char1.txt','wt'); >> fprintf(fid,'%s',a);
例2:创建文件myfile.dat,向文件中写入如下数据
创建文件myfile.dat,向文件中写入如下数据 k x(k) 1 1.00 2 2.00 3 3.00 4 4.00 5 5.00 >>x=[1 2 3 4 5]; fout=fopen('myfile.dat','wt'); fprintf(fout,' k x(k)\n'); for k=1:length(x) fprintf(fout,'%4d %5.2f\n',k,x(k)); end >> fclose(fout) 或者: >>x=[1 2 3 4 5]; fout=fopen('myfile.dat','wt'); fprintf(fout, '%13s\n', 'k x(k)');(不同之处) for k=1:length(x) fprintf(fout,'%4d %5.2f\n',k,x(k)); end >> fclose(fout) ans = 0 >> type myfile.dat k x(k) 1 1.00 2 2.00 3 3.00 4 4.00 5 5.00
(补充:%2d 宽度占2位,如果不够用左空格补充. 如 数据1. 显示 空格1 ; 如100,显示 100 (长于2位按实际显示) %4d 宽度占4位,如果不够用左空格补充 如数据1. 显示 空格空格空格1;如100,显示 空格100(不足4位左补空格1位)
'%5.2f' 每个数值元素的字符格式为宽度为 5,小数后 2 位)