相比其他编程语言,matlab可以更加方便实现自己想法,并且具备很多安装好的库,函数,无需配置环境和安装库,由于经常使用matlab和其他编程语言如python,c++,有时候格式很容易搞混,从而总是要谷歌搜索,干脆把常用一些功能和数据读取格式记录下来,方便查用。
一、各类文件读取、显示、保存
0、文件/文件夹
0.1、判断文件是否存在
1、图像文件
1.1、图片读取
(1)imread()函数
img = imread('myimage.jpg');
imshow(img);
1.2、图片显示
(1)imshow()函数
imshow(img);
1.3、图片保存
(1)imwrite()函数
imwrite(img,'myimage.png');
2、音频文件
2.1 音频文件读取
[x,fx] = audioread('myaudio.wav');
%x:音频数据
%fs:音频采样率
2.2 音频文件播放
player = audioplayer(myaudio,Fs);
% 创建音频播放对象
% myaudio:音频数据
% Fs:音频的采样频率
%%---------播放------------
play(player);
%%---------暂停------------
pause(player);
%%---------继续------------
resume(player);
%%---------停止------------
stop(player);
(2)sound函数
sound(myaudio,Fs);
2.3 音频文件保存
(1)audiowrite()
audiowrite(filename,myaudio,Fs);
% filename:文件名,如 'audioname.wav'
% myaudio:音频文件数据
% Fs:音频采样频率
3、文本文件
3.1 txt文件读写
(1)fopen()函数
% 打开文件 tsunamis.txt 并获取文件标识符
fileID = fopen('tsunamis.txt');
% 将 fileID 传递给 fgetl 函数以从文件读取一行
tline = fgetl(fileID)
% 关闭文件
fclose(fileID)
(2)fprintf()函数
将数据写入文本文件
fileID = fopen('1.txt','w');
fprintf(fileID,'abc');
fclose(fileID);
(3)importdata函数
可直接将结构统一的数据读取为矩阵形式
A = importdata(filename)
3.2 表格文件
(1)readtable()函数
此函数读取文件数据并将其保存在包含每列变量的表中。如果 CSV 文件的每一列都不包含变量,readtable() 函数将为它们提供一个从 var1 开始的默认变量名,依此类推
% readtable 基于文件的扩展名确定文件格式:
% .txt、.dat 或 .csv(带分隔符的文本文件)
% .xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods(电子表格文件)
% .xml(可扩展标记语言 (XML) 文件)
% .docx(Microsoft® Word 文档文件)
% .html、.xhtml 或 .htm(超文本标记语言 (HTML) 文件)
T = readtable(filename);
(2)readmatrix()函数
从文件中读取列向数据来创建数组,需要注意的是,该函数是2019a才加入的,早于该版本的旧版里没有这个函数,需要改用其他函数
% readmatrix 基于文件的扩展名确定文件格式:
% .txt、.dat 或 .csv(适用于带分隔符的文本文件)
% .xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods(适用于电子表格文件)
A = readmatrix(filename);
(3)readcell()函数
从文件中读取元胞数组
% readcell 基于文件的扩展名确定文件格式:
% .txt、.dat 或 .csv(适用于带分隔符的文本文件)
% .xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods(适用于电子表格文件)
C = readcell(filename);
4、数据输出显示
4.1 直接输出
直接键入变量名称,不使用“;”即可在命令行直接显示变量数值
4.1 disp()函数
disp(X) 函数显示变量 X 的值,而不打印变量名称;
4.1 fprintf()函数
fprintf()函数将数据按指定格式写入到文本文件中
简单用法:
%fprintf(fid, format, variables);
%按指定的格式将变量的值输出到屏幕或指定文件;
%fid为文件句柄,指定要写入数据的文件,若缺省,则输出到屏幕;
%format是用来控制所写数据格式的格式符, format用来指定数据输出时采用的格式:
%d 整数
%e 实数:科学计算法形式
%f 实数:小数形式
%g 由系统自动选取上述两种格式之一
%s 输出字符串
%variables是用来存放数据的矩阵;
fprintf("abcdef\n");
a=[1,2,3];
fprintf('%d\n',i);
二、画图
1、二维曲线绘制
1.1 图形绘制:plot()、loglog()、函数
(1)plot()函数
直接绘制曲线
plot(Y); % 横坐标直接为数据数量,纵坐标为Y的值
plot(X,Y); % 横坐标为X,纵坐标为Y
plot(X1,Y1,Xn,Yn); % 同时绘制多条曲线
plot(X,Y,'--'); % 指定线性、标记和颜色,如这里为‘--’,即设置为虚线
(2)loglog()函数
用于双坐标轴进行对数运算,以对数方式显示
x = logspace(-1,2);
y = 2.^x;
loglog(x,y)
1.2 分块创建坐标区:subplot()
subplot(m,n,p) % 将当前图窗划分为m×n网格,并在p指定的位置创建坐标区
%% ----------创建不同大小子图------------
subplot(2,2,[3,4]); % 如本例中将第三、四子图合并为更大一个子图
%% ---------自定义位置子图-----------
pos1 = [0.1 0.3 0.3 0.3];
subplot('Position',pos1)
y = magic(4);
plot(y)
title('First Subplot')
pos2 = [0.5 0.15 0.4 0.7];
subplot('Position',pos2)
bar(y)
title('Second Subplot')
%% -----------修改坐标区属性------------
ax1 = subplot(2,1,1);
Z = peaks;
plot(ax1,Z(1:20,:))
ax2 = subplot(2,1,2);
plot(ax2,Z)
1.3 添加标签:title()、xlabel()、ylabel()
title(titletext); % 添加图像标题
xlabel(txt); % 添加横坐标标签
ylabel(txt); % 添加纵坐标标签
1.4 设置坐标轴范围:axis()
axis([0 1 -1 1]) % 表示横坐标显示范围为:0~1,纵坐标显示范围为:-1~1
axis([0 1 -inf inf]) % inf:使用自动计算的值作为 y 轴的最大范围
axis off % 绘制曲面而不显示坐标区的线条和背景
axis tight % 将坐标轴范围设置为等于数据范围,这样绘图可以扩展到坐标区边缘
axis ij % 更改坐标系的方向,将y轴从大到小
1.5 添加绘图:hold on、hold off
hold on、hold off
添加新绘图时保留当前绘图
x = linspace(-pi,pi);
y1 = sin(x);
plot(x,y1)
hold on
y2 = cos(x);
plot(x,y2)
hold off
1.6 添加图例:legend()
legend % 为每个绘制的数据序列创建一个带有描述性标签的图例
legend(label1,label2) % 以字符向量或字符串列表形式指定标签
legend({'Jan','Feb','Mar'}) % 使用字符向量元胞数组、字符串数组或字符矩阵设置标签
legend('off') % 删除图例
1.7 添加图例:指定线型、颜色
plot(t,data,'color','red'); % 几种常见颜色单词
plot(t,data,'color','r'); % 几种常见颜色单词首字母缩写
plot(t,data,'color',[0.5 0.5 0.5]); % 0-1范围使用颜色RGB值更加精准、丰富
plot(t,data,'color',‘#80B3FF’); % 使用16进制颜色代码,R2019a之后
线形、标记、线宽(matlab官方教程)
plot([0 1 2 3],'--'); %线型
plot([0 1 2 3],'--o'); %标记
plot([1 2 3 4 5 6],[0 3 1 6 4 10],'--or'); %指定颜色、线型和标记的组合
p = plot([1 2 3 4 5 6],[0 3 1 6 4 10],'-o','LineWidth',3); %修改线宽、标记填充和标记轮廓
2、散点绘制
1.1 图形绘制:scatter()函数
3、图文本中的希腊字母和特殊字符
三、文件夹、文件批量操作
1、读取文件夹内所有文件
(1)列出文件夹内容:dir函数
dir %列出当前文件夹内文件和文件夹,注意第一、二项为'.'和‘..’
dir name % 列出与 name 匹配的文件和文件夹
listing = dir(name) % 返回 name 的属性
listing = dir([path,'*.wav']); % 注意path路径用单引号‘’,不要用双引号“”。
%使用通配符*获取指定类型文件,不会有'.'和'..'两项
(2)读取文件/文件夹名
name = listing(n).name % n代表第几个,读取其他信息类似
2、新建文件夹
mkdir('D://new_dir');
四、对数据、字符串处理
1、字符串:串联、格式化、转换
1.1 串联
s = strcat(s1,...,sN)
% 水平串联其输入参数中的文本。每个输入参数都可以是字符数组、字符向量元胞数组或字符串数组
[ ]直接相连
需要注意的点:相连接的变量需要为char类型
s = [s1,s2]; %直接使用'[]'将字符串串联
1.2 格式化输出
很多时候我们需要将数据以文本形式按某种格式输出,如保留某小数点以十进制输出。此时需要用到matlab格式化文本输出
在输出字符串表达式中,用%标识,常用形式需要指出最后‘转换类型’,‘转换精度’,‘字段宽度’
转换类型:
c 单个字符。
d 十进制记数法(有符号)。
e 指数记数法(使用小写 e,如 3.1415e+00 中一样)。
E 指数记数法(使用大写 E,如 3.1415E+00 中一样)。
f 定点记数法。
g 更紧凑的 %e 或 %f。(将不输出无意义的零。)
G 与 %g 相同,但使用大写 E。
o 八进制记数法(无符号)。
s 字符向量或字符串数组。
u 十进制记数法(无符号)。
x 十六进制记数法(无符号,使用小写字母 a–f)。
X 十六进制记数法(无符号,使用大写字母 A–F)。
例子
A = pi*ones(1,3);
txt = sprintf('Displaying pi: \n %f \n %.2f \n %12f', A)
txt =
'Displaying pi:
3.141593
3.14
3.141593'
1.3 字符串比较
tf = strcmp(s1,s2) 比较 s1 和 s2,如果二者相同,则返回 1 (true),否则返回 0 (false)。
1.4 cell/数字与字符串互转
转成字符串或者字符:string或者char函数
转成数字:str2num函数
a = string(b);
c = char(a);
a = '123.34';
b = str2num(a);
c = string(b);
四、对图像进行处理
1、图像裁剪
Icropped = imcrop(I,rect) % 根据在裁剪矩形 rect 中指定的位置和维度裁剪图像 I。
%裁剪的图像包括输入图像中该矩形完全或部分包围的所有像素。
%输出图像的实际大小并不始终与 rect 指定的宽度和高度完全一致。例如,假设 rect 是 [20 20 40 30](使用默认的空间坐标系)。
%指定矩形的左上角是空间 (x,y) 坐标为 (20,20) 的像素的中心。矩形的右下角是空间 (x,y) 坐标为 (60,50) 的像素的中心。生成的输出图像大小为 31×41 像素,而不是 30×40 像素。