MATLAB 常用操作

MATLAB读文件

在使用MATLAB时,我们常常要使用一些现成的数据,它们可能是存储在例如excel文档txt文档等文档中,我们希望我们可以从直接从这些文档中读出我们想要的数据并且存储在MATLAB中相应的数据结构中。本文旨在尽可能地总结MATLAB读取文件的所有方法,以及读取过程中会遇到的问题以及一些必要的说明。

读取xls、xlsx格式文档

这两种格式文档读入的方法是一样的,即使用xlsread('文件名')的方式读入,通常我们将这个值传递给一个变量。
例如,有一个叫table1.xlsx的文件长的如图1所示:
图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。
图2

>> 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:
图3
现在要按每7行作为一个表格分别存储到4个变量中。由于我们读取的数据已经存储在了矩阵当中,因此这种处理就相当于是对矩阵进行分割啦。在matlab中,我们可以用某个矩阵加括号,括号里制定取内容的区间的方式来获得矩阵的部分内容,例如有一个 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

读取txt文档

猜你喜欢

转载自blog.csdn.net/acmeinan/article/details/80333229