MATLAB读文件
在使用MATLAB时,我们常常要使用一些现成的数据,它们可能是存储在例如excel文档txt文档等文档中,我们希望我们可以从直接从这些文档中读出我们想要的数据并且存储在MATLAB中相应的数据结构中。本文旨在尽可能地总结MATLAB读取文件的所有方法,以及读取过程中会遇到的问题以及一些必要的说明。
读取xls、xlsx格式文档
这两种格式文档读入的方法是一样的,即使用xlsread('文件名')
的方式读入,通常我们将这个值传递给一个变量。
例如,有一个叫table1.xlsx
的文件长的如图1所示:
操作与结果如下所示:
>> B=xlsread('table1.xlsx')
B =
2 20 6 10 15 18 7
NaN 5 0 8 10 10 20
NaN NaN 12 17 14 9 30
NaN NaN NaN 0 6 15 20
NaN NaN NaN NaN 30 27 20
NaN NaN NaN NaN NaN 18 10
NaN NaN NaN NaN NaN NaN 22
好消息是,我们发现标题被自动忽略了,留下的只有数据。但这个表格几乎是理想的,如果我们的表格如图2不如上述那么理想怎么办,很抱歉,matlab还没办法做到那么聪明,在图二中的第二个表格的表头会被读入成NaN。
>> test=xlsread('table1.xlsx')
test =
2 20 6 10 15 18 7
NaN 5 0 8 10 10 20
NaN NaN 12 17 14 9 30
NaN NaN NaN 0 6 15 20
NaN NaN NaN NaN 30 27 20
NaN NaN NaN NaN NaN 18 10
NaN NaN NaN NaN NaN NaN 22
NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN NaN NaN
12 8 6 10 5 4 7
NaN 9 12 10 9 5 2
NaN NaN 12 7 6 5 2
NaN NaN NaN 8 7 5 1
NaN NaN NaN NaN 5 8 24
NaN NaN NaN NaN NaN 26 18
NaN NaN NaN NaN NaN NaN 0
所以我们常常要对读到的数据做一定的人工处理。例如我有一堆要数据,它们是由4个表格构成的,如图3:
现在要按每7行作为一个表格分别存储到4个变量中。由于我们读取的数据已经存储在了矩阵当中,因此这种处理就相当于是对矩阵进行分割啦。在matlab中,我们可以用某个矩阵加括号,括号里制定取内容的区间的方式来获得矩阵的部分内容,例如有一个
88
88
矩阵A
,我们就可以用A1=A(1:3,:)
的方式取它的前三行(打横的算一行),这里逗号以前就表示取的行数,1:3
代表1到3行,逗号后的:
如果两边都没有指明数字就代表全取。而如果只取1行或1列,则只要输入当行的数字即可。有时候我们不知道矩阵的大小,可以用end代替最后一行或列,这样既可以达到效果也不会越界,例如A2=A(1:end,5)
这就代表取第1到最后一行,都取第5列。如果三维数组也是一样,第三维(称为页)将被放在第二个逗号之后。下面的例子展示的是将图3所示的文件读入并分成4个表的例子(比较长,懂的可以直接跳过):
>> table=xlsread('table1.xlsx')
table =
2 20 6 10 15 18 7
NaN 5 0 8 10 10 20
NaN NaN 12 17 14 9 30
NaN NaN NaN 0 6 15 20
NaN NaN NaN NaN 30 27 20
NaN NaN NaN NaN NaN 18 10
NaN NaN NaN NaN NaN NaN 22
12 8 6 10 5 4 7
NaN 9 12 10 9 5 2
NaN NaN 12 7 6 5 2
NaN NaN NaN 8 7 5 1
NaN NaN NaN NaN 5 8 24
NaN NaN NaN NaN NaN 26 18
NaN NaN NaN NaN NaN NaN 0
888 1680 2530 3197 3996 4795 4793
NaN 888 1680 2530 3179 3996 4262
NaN NaN 888 1680 2530 3374 3552
NaN NaN NaN 888 1776 2664 3197
NaN NaN NaN NaN 999 1998 2697
NaN NaN NaN NaN NaN 999 1680
NaN NaN NaN NaN NaN NaN 888
1100 2200 3000 4000 5000 5800 6000
NaN 1100 2200 3000 4000 5000 5800
NaN NaN 1100 2200 3000 4000 5000
NaN NaN NaN 1100 2200 3300 4000
NaN NaN NaN NaN 1200 2400 3300
NaN NaN NaN NaN NaN 1200 2300
NaN NaN NaN NaN NaN NaN 1100
for i=1:4
tablem(:,:,i)=table(1+7*(i-1):i*7,:)
end
tablem(:,:,1) =
2 20 6 10 15 18 7
NaN 5 0 8 10 10 20
NaN NaN 12 17 14 9 30
NaN NaN NaN 0 6 15 20
NaN NaN NaN NaN 30 27 20
NaN NaN NaN NaN NaN 18 10
NaN NaN NaN NaN NaN NaN 22
tablem(:,:,2) =
12 8 6 10 5 4 7
NaN 9 12 10 9 5 2
NaN NaN 12 7 6 5 2
NaN NaN NaN 8 7 5 1
NaN NaN NaN NaN 5 8 24
NaN NaN NaN NaN NaN 26 18
NaN NaN NaN NaN NaN NaN 0
tablem(:,:,3) =
888 1680 2530 3197 3996 4795 4793
NaN 888 1680 2530 3179 3996 4262
NaN NaN 888 1680 2530 3374 3552
NaN NaN NaN 888 1776 2664 3197
NaN NaN NaN NaN 999 1998 2697
NaN NaN NaN NaN NaN 999 1680
NaN NaN NaN NaN NaN NaN 888
tablem(:,:,4) =
1100 2200 3000 4000 5000 5800 6000
NaN 1100 2200 3000 4000 5000 5800
NaN NaN 1100 2200 3000 4000 5000
NaN NaN NaN 1100 2200 3300 4000
NaN NaN NaN NaN 1200 2400 3300
NaN NaN NaN NaN NaN 1200 2300
NaN NaN NaN NaN NaN NaN 1100