第二章 Matlab数据处理
2.1 数据组织
2.1.1 元胞数组
元胞数组是一种包含名为元胞的索引数据容器的数据类型,其中的每个元胞都可以包含任意数据类型的数据。元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。通常将索引括在圆括号()中可以引用元胞集。使用花括号{}进行索引来访问元胞的内容。
>> a=cell(2,3); %定义一个两行三列的元胞数组
>> b={[1],rand(3);'sadasda',rand(1,2)} %定义并且初始化一个两行两列的元胞数组
>> c=b{1,2} %提取元胞数组中的具体元素
>> d=b(1,:) %结果还是元胞数组
!!!注:元胞数组一定要用{}来提取其中的元素
元胞数组赋值时同上,也一定得用{}。
整体赋值:
>> a=cell(2,3);
>> a(1,[2,3])={'sadsd',rand(3)}
a =
2×3 cell 数组
{0×0 double} {'sadsd' } {3×3 double}
{0×0 double} {0×0 double} {0×0 double}
例2.1 元胞数组存取示例:
clc,clear
a={'张三','李四','王五';12 15 16};
b1=[a{2,:}] %提取其中的数值矩阵
b2=cell2mat(a(2,:)) %提取其中的数值矩阵
[r1c1,r2c1,~,~,r1c3,r2c3]=a{:} %逐列展开并赋值给其他变量
c=[a;{'M','M','F'}] %元胞数组垂直方向串联
‘~’表示矩阵该位置不赋值
b1 = 12 15 16
b2 = 12 15 16
>> b4=a{2,:}
b4 = 12
>> b4={a{2,:}}
b4 = {[12]} {[15]} {[16]}
注:(1) a{2,:}应该表示元胞数组的三个元素,但是b4只能代表其中一个,所以b4=12
(2)a{2,:}应该表示元胞数组的三个元素,{a{2,:}}则又将每个元素加上了{}.
例2.2 Excel的使用
clc,clear
a=xlsread('data01.xlsx'); %调用Excel的数值矩阵
xy=[a(:,[1,2]);a([1:end-1],[4,5])] %筛选所有的数值
clc,clear
[a,b]=xlsread('data01.xlsx','A2:F7') %列表的左上角到右下角
a =
865 141 NaN 690 131
941 187 NaN 254 495
711 841 NaN 736 443
782 726 NaN 128 789
769 385 NaN 349 816
453 956 NaN NaN NaN
b =
6×4 cell 数组
{'基地R' } {0×0 char} {0×0 char} {'无名高地'}
{'基地S' } {0×0 char} {0×0 char} {'山谷1' }
{'基地T' } {0×0 char} {0×0 char} {'山谷11' }
{'101高地'} {0×0 char} {0×0 char} {'山谷01' }
{'12高地' } {0×0 char} {0×0 char} {'山谷001'}
{'116高地'} {0×0 char} {0×0 char} {0×0 char }
a的值为:最大维数的数值数组
b的值为:最大维数的字符数组
例2.3 选取Excel中数据画图
clc,clear
[a,b]=xlsread('data02.xlsx')
a=[a(:,[1,2]);a([1:end-1],[4,5])] %提取需要的数据
b={b{:,1},b{[1:end-1],4}} %提取非空字符串,构造新的字符串元胞数组
plot(a([1:3],1),a([1:3],2),'p') %画前3个点
hold on, plot(a([4:end],1),a([4:end],2),'*') %画其余点
text(a(:,1)+5,a(:,2),b) %对所有的点进行标注
2.1.2 结构体数组
结构体数组和元胞数组非常类似,因为他们都能将不同数据类型的数据组织在单一变量中。和元胞数组不同之处在于,结构体数组的数据是由称作字段的名称指定的,而不是由数字索引指定的,每一个字段都能包含任意类型和大小的数据。它使用圆点表示法而不是用花括号{}索引来访问其中的数据。
MATLAB提供两种方法建立结构数组,用户可以直接给结构体数组字段赋值建立结构体数组,也可以利用函数struct建立结构体数组。
例2.3 利用赋值建立结构体数组
clc,clear
stu(1).name='LiMing';stu(1).number='0101';
stu(1).sex='f';stu(1).score=[90,80];
stu(2).name='LiHong';stu(2).number='0102';
stu(2).sex='m';stu(2).score=[88,80];
stu %显示结构体数组的结构
stu(1) %显示结构体数组第1个元素
stu(2) %显示结构体数组第2个元素
Matlab命令
f=dir('*.m')
可以显示当前目录下所有后缀名为m的文件信息,返回值f是一个结构数组,包括5个域:name、date、bytes、isdir、datenum;通过结构数组的元素个数就可以知道当前目录下m文件的个数,通过name域可以直到当前目录下所有m文件的名称。dir命令可以读出所有类型文件的信息。
2.2 简单文本数据的操作
将纯文本文件是用记事本把数据保存到Matlab的当前工作路径下。以下所有的操作的数据文件必须放在Matlab的当前文件工作路径下,也就是说程序文件和数据文件要放在同一个目录下。
4种方法:
1.a=load('data.txt') %只能适用于满行满列的数据
2.a=textread('data.txt') %当不是满行满列时,缺少的地方自动补成0.
3.a=readmatrix('data.txt') %当不是满行满列时,缺少的地方自动补成NaN.
4.a=importdata('data.txt') %当不是满行满列时,缺少的地方自动补成NaN.