zoukankan      html  css  js  c++  java
  • matlab操作(整理)

    http://blog.csdn.net/ysuncn/article/details/1741828

    http://zhan.renren.com/h5/entry/3602888498000464631

    http://blog.sina.com.cn/s/blog_9444ed240101dxx3.html

    1.文件的打开与关闭

    • fopen 打开文件

      在读写文件之前,必须先用fopen函数打开或创建文件,并指定对该文件进行的操作方式。fopen函数的调用格式为: fid=fopen(文件名,“打开方式”) 
      说明:其中fid用于存储文件句柄值,如果返回的句柄值大于0,则说明文件打开成功。文件名用字符串形式,表示待打开的数据文件。常见的打开方式如下: 
      r:只读方式打开文件(默认的方式),该文件必须已存在。

      r+:读写方式打开文件,打开后先读后写。该文件必须已存在。

      w:打开后写入数据。该文件已存在则更新;不存在则创建。
      w+:读写方式打开文件。先读后写。该文件已存在则更新;不存在则创建。

      a:在打开的文件末端添加数据。文件不存在则创建。
      a+:打开文件后,先读入数据再添加数据。文件不存在则创建。
      另外,在这些字符串后添加一个“t”,如“rt‟或”wt+‟,则将该文件以文本方式打开;如果添加的是“b”,则以二进制格式打开,这也是fopen函数默认的打开方式。  

    • fclose 关闭文件 

      文件在进行完读、写等操作后,应及时关闭,以免数据丢失。关闭文件用fclose函数,调用格式为: sta=fclose(fid) 
      说明:该函数关闭fid所表示的文件。sta表示关闭文件操作的返回代码,若关闭成功,返回0,否则返回-1如果要关闭所有已打开的文件用fclose(„all‟)。

    2.二进制文件的读写

    • fwrite 写二进制文件 
      fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为: COUNT=fwrite(fid,A,precision) 
      说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。 
      例6.8 将一个二进制矩阵存入磁盘文件中。 

            >> a=[1 2 3 4 5 6 7 8 9]; 

            >> fid=fopen('d: est.bin','wb') %以二进制数据写入方式打开文件 

         fid = 3 %其值大于0,表示打开成功 

       >> fwrite(fid,a,'double') 

        ans =  9 %表示写入了9个数据

    • fread 读二进制文件 

      fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为: [A,COUNT]=fread(fid,size,precision) 
      说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。 precision用于控制所写数据的精度,其形式与fwrite函数相同。

    3.文本文件的读写操作

    • 读文本文件 

      fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为: [A,COUNT]=fscanf(fid,format,size) 
      说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。   
      matlab中的fscanf的用法如下:

      A=fscanf(fid,format) 

      [A, count]=fscanf(fid,format,size)  


      个人感觉用的最多的是这样的形式: 
      data = fscanf(fid,format,size); 
      其中data为读取内容的数组,它的大小由size决定。size是一个[m n]的向量,m为行,n为列(注意,这里读取的顺序是按列优先排列的,不明白的话可以看下面的例子),若n取inf表示读到文件末尾。fid为fopen打开文件的返回值,format是格式化参数(像printf、scanf)。 

      matlab读txt文件 

      fid=fopen('fx.txt','r'); %得到文件号 
      [f,count]=fscanf(fid,'%f %f',[12,90]); 
      %把文件号1的数据读到f中。其中f是[12 90]的矩阵 

      %这里'%f %f'表示读取数据的形式,按原始数据型读出

       fclose(fid); %关闭文件


      举个小例子: 
      路径+文件名:d:moon.txt 

      内容:13,1,3.4 

            3,2.1,23 

                 1, 12, 2 

             4,5.4,6

      现在为了读取moon.txt中的数据存在一个数组里,可以用如下方法: 
     
      fid=fopen('d:moon.txt'); 
      data=fscanf(fid,'%f,%f,%f',[3,inf]) %这里得用单引号 

      fclose(fid); 
     
      这时data中的数据如下:(3行4列,matlab元素按照列的顺序排列) 
     
      13    3     1       4 
     
      1     2.1   12     5.4 
     
      3.4     23     2      6  
     
      再看一个运行实例:

      data=fscanf(fid,'%f,%f,%f',[4,inf]);

      fclose(fid);

      13 2.1  2
      1 23 4
        3.4 1 5.4
      3 12 6

    • fprintf 写文本文件 

      fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为: fprintf(fid,format,A) 
      说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。 
      例6.9 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。 

      >> a='string'; 
      >> fid=fopen('d:char1.txt','w'); 

      >> fprintf(fid,'%s',a); 

      >> fclose(fid); 
      >> fid1=fopen('d:char1.txt','rt');

        >> b=fscanf(fid1,'%s') 

      b =       string  

    4.数据文件定位 
      MATLAB提供了与文件定位操作有关的函数fseek和ftell。

    • fseek函数用于定位文件位置指针,其调用格式为: 

      status=fseek(fid, offset, origin) 
      其中fid为文件句柄,offset表示位置指针相对移动的字节数,OFFSET values are interpreted as follows: 

          > 0    Move toward the end of the file. 

          = 0    Do not change position. 
          < 0    Move toward the beginning of the file. 
      origin表示位置指针移动的参照位置,ORIGIN values are interpreted as follows:

           'bof' or -1  Beginning of file

          'cof' or 0   Current position in file 

          'eof' or 1   End of file 
      若定位成功,status返回值为0,否则返回值为–1。   

    • ftell函数返回文件指针的当前位置,其调用格式为: position=ftell (fid) 

      返回值为从文件开始到指针当前位置的字节数。若返回值为–1表示获取文件当前位置失败。 例: 
      FID=fopen('sw.m','r')

      fseek(FID,10,-1)

       ans =      0 

      >> ftell(FID)

      ans =     10 
      >> fseek(FID,-10,1) 

      ans =      0 

      >> ftell(FID) 

      ans =         2180 
      文件指针可以移动到当前文件末尾的后面,但不能移动到开头的前面;当把指针移动到文件末尾后面时,若关闭文件则文件大小会自动增长到文件指针所指的大小,用这种方法可以很容易创建一个很大的文件,当然新增加的文件内容是随机的


    5.prod  

      B = prod(A) 
      B = prod(A,dim) 
      B = prod(A,'double') 
      B = prod(A,'native')

      Prod函数是求积,用法和sum函数基本上差不多,但是也有一些区别,相同的部分不在赘述,只将差异简单描述一下:

      按照帮助文件中来看,sum函数有6中重载的方法,prod函数只有4种,如果选择了按某一维计算,则无法控制输出的数据类型,事实上,不是这么一回事,大家可以试一试,prod是可以带3个参数,和sum函数一样,所以我觉得帮助文件里面少些了和sum一样的2种重载的方法。

      >> a = single(magic(3))

      a =   

           8     1     6

           3     5     7

           4     9     2

      >> b = prod(a,2,'native')   % 带3个参数

      b =

          48

         105

          72

      >> class(b)

      ans =

      single

      prod函数无法对整数类型进行计算,只能对浮点型的数据计算。

    6. reshape

      看Matlab的help文档讲得不是清楚。
      先给上一段代码:
      >> a=[1 2 3;4 5 6;7 8 9;10 11 12];
      >> b=reshape(a,2,6);
      这段代码的结果是这样的:
      >> a
         1     2     3
         4     5     6
         7     8     9
        10    11    12
      >> b
         1     7     2     8     3     9
         4    10     5    11     6    12
      对于  b=reshape(a,m,n);
      其中的规律是这样的,先把矩阵a按列拆分,然后拼接成一个大小为m*n的向量。然后对这个向量每隔m间隔取一个元素组成一个向量b_i,之后的向量b_i+1也是这样生成,只不过第一个元素往下移一位。这样做完之后得到m个大小为n的行向量,将这些行向量拼接  即可得到矩阵b。
     
    Matlab <wbr>的reshape函数
    7.fliplr

      fliplr  左右翻转矩阵 

      语法:B = fliplr(A) 

      将矩阵A的列绕垂直轴进行左右翻转 matabc 
      如果A是一个行向量,fliplr(A)将A中元素的顺序进行翻转。 
      如果A是一个列向量,fliplr(A)还等于A。 

      举例说明:
      例一:如果A是一个3×2的矩阵

      A =[1 4 
                 2 5 
                 3 6 ] 

      fliplr(A) 
      ans = [4 1 
               5 2 
               6 3 ]

      例二:如果A是一个行向量

      A = [1 3 5 7 9 ]

      fliplr(A) 
      ans = [9 7 5 3 1 ]
      例三:如果A是一个列向量

      A = [1 
                   3 
                   5 
                   7 
                   9]

      fliplr(A) 
      ans = [1 
               3 
               5 
               7 
               9]

     
     
  • 相关阅读:
    leetcode 1301. 最大得分的路径数目
    LeetCode 1306 跳跃游戏 III Jump Game III
    LeetCode 1302. 层数最深叶子节点的和 Deepest Leaves Sum
    LeetCode 1300. 转变数组后最接近目标值的数组和 Sum of Mutated Array Closest to Target
    LeetCode 1299. 将每个元素替换为右侧最大元素 Replace Elements with Greatest Element on Right Side
    acwing 239. 奇偶游戏 并查集
    acwing 238. 银河英雄传说 并查集
    acwing 237程序自动分析 并查集
    算法问题实战策略 MATCHORDER 贪心
    Linux 安装Redis全过程日志
  • 原文地址:https://www.cnblogs.com/aminxu/p/4508666.html
Copyright © 2011-2022 走看看