国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Matlab文件和數(shù)據(jù)的導(dǎo)入與導(dǎo)出 - MATLAB 基礎(chǔ)應(yīng)用 - MATLAB|MATL...


 作者: admin 日期: 2009-8-22 10:01 

編寫一個程序時,經(jīng)常需要從外部讀入數(shù)據(jù),或者將程序運行的結(jié)果保存為文件。MATLAB使用多種格式打開和保存數(shù)據(jù)。本章將要介紹 MATLAB中文件的讀寫和數(shù)據(jù)的導(dǎo)入導(dǎo)出。

13.1 數(shù)據(jù)基本操作
  本節(jié)介紹基本的數(shù)據(jù)操作,包括工作區(qū)的保存、導(dǎo)入和文件打開。

13.1.1 文件的存儲
  MATLAB支持工作區(qū)的保存。用戶可以將工作區(qū)或工作區(qū)中的變量以文件的形式保存,以備在需要時再次導(dǎo)入。保存工作區(qū)可以通過菜單進行,也可以通過命令窗口進行。
  1. 保存整個工作區(qū)
  選擇File菜單中的Save Workspace As…命令,或者單擊工作區(qū)瀏覽器工具欄中的Save,可以將工作區(qū)中的變量保存為MAT文件。
  2. 保存工作區(qū)中的變量
  在工作區(qū)瀏覽器中,右擊需要保存的變量名,選擇Save As…,將該變量保存為MAT文件。
  3. 利用save命令保存
  該命令可以保存工作區(qū),或工作區(qū)中任何指定文件。該命令的調(diào)用格式如下:
● save:將工作區(qū)中的所有變量保存在當(dāng)前工作區(qū)中的文件中,文件名為 matlab.mat,MAT文件可以通過load函數(shù)再次導(dǎo)入工作區(qū),MAT函數(shù)可以被不同的機器導(dǎo)入,甚至可以通過其他的程序調(diào)用。
● save('filename'):將工作區(qū)中的所有變量保存為文件,文件名由filename指定。如果filename中包含路徑,則將文件保存在相應(yīng)目錄下,否則默認路徑為當(dāng)前路徑。
● save('filename', 'var1', 'var2', ...):保存指定的變量在 filename 指定的文件中。
● save('filename', '-struct', 's'):保存結(jié)構(gòu)體s中全部域作為單獨的變量。
● save('filename', '-struct', 's', 'f1', 'f2', ...):保存結(jié)構(gòu)體s中的指定變量。
● save('-regexp', expr1, expr2, ...):通過正則表達式指定待保存的變量需滿足的條件。
● save('..., 'format'),指定保存文件的格式,格式可以為MAT文件、ASCII文件等。
13.1.2 數(shù)據(jù)導(dǎo)入
  MATLAB中導(dǎo)入數(shù)據(jù)通常由函數(shù)load實現(xiàn),該函數(shù)的用法如下:
● load:如果matlab.mat文件存在,導(dǎo)入matlab.mat中的所有變量,如果不存在,則返回error。
● load filename:將filename中的全部變量導(dǎo)入到工作區(qū)中。
● load filename X Y Z ...:將filename中的變量X、Y、Z等導(dǎo)入到工作區(qū)中,如果是MAT文件,在指定變量時可以使用通配符“*”。
● load filename -regexp expr1 expr2 ...:通過正則表達式指定需要導(dǎo)入的變量。
● load -ascii filename:無論輸入文件名是否包含有擴展名,將其以ASCII格式導(dǎo)入;如果指定的文件不是數(shù)字文本,則返回error。
● load -mat filename:無論輸入文件名是否包含有擴展名,將其以mat格式導(dǎo)入;如果指定的文件不是MAT文件,則返回error。
例13-1 將文件matlab.map中的變量導(dǎo)入到工作區(qū)中。
  首先應(yīng)用命令whos –file查看該文件中的內(nèi)容:
  >> whos -file matlab.mat
   Name                  Size              Bytes Class
   A                    2x3              48 double array
   I_q                 415x552x3            687240 uint8 array
   ans                1x3               24 double array
   num_of_cluster       1x1               8 double array
  Grand total is 687250 elements using 687320 bytes
  將該文件中的變量導(dǎo)入到工作區(qū)中:
  >> load matlab.mat
  該命令執(zhí)行后,可以在工作區(qū)瀏覽器中看見這些變量,如圖13-1所示。

圖13-1 導(dǎo)入變量后的工作區(qū)視圖
  接下來用戶可以訪問這些變量。
  >> num_of_cluster
  num_of_cluster =
       3
  MATLAB中,另一個導(dǎo)入數(shù)據(jù)的常用函數(shù)為importdata,該函數(shù)的用法如下:
● importdata('filename'),將filename中的數(shù)據(jù)導(dǎo)入到工作區(qū)中;
● A = importdata('filename'),將filename中的數(shù)據(jù)導(dǎo)入到工作區(qū)中,并保存為變量A;
● importdata('filename','delimiter'),將filename中的數(shù)據(jù)導(dǎo)入到工作區(qū)中,以delimiter指定的符號作為分隔符;
例13-2 從文件中導(dǎo)入數(shù)據(jù)。
  >> imported_data = importdata('matlab.mat')
  imported_data =
                 ans: [1.1813 1.0928 1.6534]
                   A: [2x3 double]
                 I_q: [415x552x3 uint8]
      num_of_cluster: 3
  與load函數(shù)不同,importdata將文件中的數(shù)據(jù)以結(jié)構(gòu)體的方式導(dǎo)入到工作區(qū)中。
13.1.3 文件的打開
  MATLAB中可以使用open命令打開各種格式的文件,MATLAB自動根據(jù)文件的擴展名選擇相應(yīng)的編輯器。
   需要注意的是open('filename.mat')和load('filename.mat')的不同,前者將filename.mat以結(jié)構(gòu)體的方式打開在工作區(qū)中,后者將文件中的變量導(dǎo)入到工作區(qū)中,如果需要訪問其中的內(nèi)容,需要以不同的格式進行。
   
例13-3 open與load的比較。
  >> clear
  >> A = magic(3);
  >> B = rand(3);
  >> save
  Saving to: matlab.mat
  >> clear
  >> load('matlab.mat')
  >> A
  A =
       8     1     6
       3     5     7
       4     9     2
  >> B
  B =
      0.9501    0.4860    0.4565
      0.2311    0.8913    0.0185
      0.6068    0.7621    0.8214
  >> clear
  >> open('matlab.mat')
  ans =
      A: [3x3 double]
      B: [3x3 double]
  >> struc1=ans;
  >> struc1.A
  ans =
       8     1     6
       3     5     7
       4     9     2
  >> struc1.B
  ans =
      0.9501    0.4860    0.4565
      0.2311    0.8913    0.0185
      0.6068    0.7621    0.8214
13.2 文本文件的讀寫
  在上一節(jié)中介紹的函數(shù)和命令主要用于讀寫mat文件,而在應(yīng)用中,需要讀寫更多格式的文件,如文本文件、word文件、xml文件、xls文件、圖像文件和音視頻文件等。本節(jié)介紹文本文件(txt)的讀寫。其他文件的讀寫,用戶可以參考MATLAB幫助文檔。
  MATLAB中實現(xiàn)文本文件讀寫的函數(shù)如表13-1所示。
表13-1 MATLAB中文本文件讀寫函數(shù)
函    數(shù)
功    能
csvread
讀入以逗號分隔的數(shù)據(jù)
csvwrite
將數(shù)據(jù)寫入文件,數(shù)據(jù)間以逗號分隔
dlmread
將以 ASCII 碼分隔的數(shù)值數(shù)據(jù)讀入到矩陣
dlmwrite
將矩陣數(shù)據(jù)寫入到文件中,以 ASCII 分隔
textread
從文本文件中讀入數(shù)據(jù),將結(jié)果分別保存
textscan
從文本文件中讀入數(shù)據(jù),將結(jié)果保存為單元數(shù)組
  
  下面詳細介紹這些函數(shù)。
  1. csvread、csvwrite
  csvread函數(shù)的調(diào)用格式如下:
● M = csvread('filename'),將文件filename中的數(shù)據(jù)讀入,并且保存為M,filename中只能包含數(shù)字,并且數(shù)字之間以逗號分隔。M是一個數(shù)組,行數(shù)與filename的行數(shù)相同,列數(shù)為filename列的最大值,對于元素不足的行,以0補充。
● M = csvread('filename', row, col),讀取文件filename中的數(shù)據(jù),起始行為row,起始列為col,需要注意的是,此時的行列從0開始。
● M = csvread('filename', row, col, range),讀取文件filename 中的數(shù)據(jù),起始行為 row,起始列為col,讀取的數(shù)據(jù)由數(shù)組 range 指定,range 的格式為:[R1 C1 R2 C2],其中R1、C1為讀取區(qū)域左上角的行和列,R2、C2為讀取區(qū)域右下角的行和列。
  csvwrite 函數(shù)的調(diào)用格式如下:
● csvwrite('filename',M),將數(shù)組M中的數(shù)據(jù)保存為文件filename,數(shù)據(jù)間以逗號分隔。
● csvwrite('filename',M,row,col),將數(shù)組M中的指定數(shù)據(jù)保存在文件中,數(shù)據(jù)由參數(shù) row和col指定,保存row和col右下角的數(shù)據(jù)。
● csvwrite寫入數(shù)據(jù)時每一行以換行符結(jié)束。另外,該函數(shù)不返回任何值。
  這兩個函數(shù)的應(yīng)用見下面的例子。
例13-4 函數(shù)csvread和csvwrite 的應(yīng)用。
  本例首先將MATLAB的圖標(biāo)轉(zhuǎn)化為灰度圖,將數(shù)據(jù)存儲在文本文件中,再將其部分讀出,顯示為圖形。
  編寫M文件,命名為immatlab.m,內(nèi)容為:
  % the example of functions csvread and csvwrite
  I_MATLAB= imread('D:\matlab.bmp');     % read in the image
  I_MATLAB= rgb2gray(I_matlab);          % convert the image to gray image
  figure,imshow(I_matlab,'InitialMagnification',100); % show the image
  csvwrite('D:\matlab.txt',I_matlab);     % write the data into a text file
  sub_MATLAB= csvread('D:\matlab.txt',100,100);% read in part of the data
  sub_MATLAB= uint8(sub_matlab);         % convert the data to uint8
  figure,imshow(sub_matlab,'InitialMagnification',100);      % show the new image
  在命令窗口中運行該腳本,輸出圖形如圖13-2所示。

(a)                                            (b)
圖13-2 例13-3 的運行結(jié)果
  該例中涉及到了少量的圖像處理內(nèi)容,超出本書的范圍,感興趣的讀者可以查閱 MATLAB幫助文檔中關(guān)于Image Processing Toolbox的介紹。
  2. dlmread、dlmwrite(個人覺得這個比較好用)
  dlmread函數(shù)用于從文檔中讀入數(shù)據(jù),其功能強于csvread。dlmread的調(diào)用格式如下:
● M = dlmread('filename')
● M = dlmread('filename', delimiter)
● M = dlmread('filename', delimiter, R, C)
● M = dlmread('filename', delimiter, range)
  其中參數(shù)delimiter用于指定文件中的分隔符,其他參數(shù)的意義與csvread函數(shù)中參數(shù)的意義相同,這里不再贅述。dlmread函數(shù)與csvread函數(shù)的差別在于,dlmread函數(shù)在讀入數(shù)據(jù)時可以指定分隔符,不指定時默認分隔符為逗號。
  dlmwrite函數(shù)用于向文檔中寫入數(shù)據(jù),其功能強于csvwrite函數(shù)。dlmwrite函數(shù)的調(diào)用格式為:
● dlmwrite('filename', M),將矩陣M的數(shù)據(jù)寫入文件filename中,以逗號分隔。
● dlmwrite('filename', M, 'D'),將矩陣M的數(shù)據(jù)寫入文件filename中,采用指定的分隔符分隔數(shù)據(jù),如果需要tab鍵,可以用“\t”指定。
● dlmwrite('filename', M, 'D', R, C),指定寫入數(shù)據(jù)的起始位置。
● dlmwrite('filename', M, attribute1, value1, attribute2, value2, ...),指定任意數(shù)目的參數(shù),可以指定的參數(shù)見下表。
● dlmwrite('filename', M, '-append'),如果filename指定的文件存在,在文件后面寫入數(shù)據(jù),不指定時則覆蓋原文件。
● dlmwrite('filename', M, '-append', attribute-value list),敘寫文件,并指定參數(shù)。
● dlmwrite 函數(shù)的可用參數(shù)如表13-2所示。

表13-2 dlmwrite函數(shù)的可用參數(shù)
參 數(shù) 名
功    能
delimiter
用于指定分隔符
newline
用于指定換行符,可以選擇“pc”或者“unix”
roffset
行偏差,指定文件第一行的位置,roffset 的基數(shù)為 0
coffset
列偏差,指定文件第一列的位置,coffset 的基數(shù)為 0
precision
指定精確度,可以指定精確維數(shù),或者采用 c 語言的格式,如“%10.5f”
  
  3. textread,textscan
  當(dāng)文件的格式已知時,可以利用textread函數(shù)和textscan函數(shù)讀入。這里只介紹這兩個函數(shù)應(yīng)用的實例。
  例13-5 通過%讀入文件,按照原有格式讀取。
文件的內(nèi)容為:
  Sally    Level1 12.34 45 Yes
在命令窗口中輸入:
  >> [names, types, x, y, answer] = textread('D:\mat.txt','%s %s %f %d %s', 1)
得到結(jié)果為:
  names =
      'Sally'
  types =
      'Level1'
  x =
     12.3400
  y =
      45
  answer =
      'Yes'
  
  
  例13-6 函數(shù)csvread和csvwrite的應(yīng)用
  Sally Level1 12.34 45 1.23e10 inf NaN Yes
  Joe Level2 23.54 60 9e19 -inf 0.001 No
  Bill Level3 34.90 12 2e5 10 100 No
  >> fid = fopen('D:\mat.txt');
  >> C = textscan(fid, '%s %s %f32 %d8 %u %f %f %s');
  >> fclose(fid);
13.3 低級文件I/O
  本節(jié)介紹一些基本的文件操作,這些操作如表13-3所示。
表13-3 MATLAB的基本文件操作
函    數(shù)
功    能
     fclose
關(guān)閉打開的文件
     feof
判斷是否為文件結(jié)尾
     ferror
文件輸入輸出中的錯誤查找
     fgetl
讀入一行,忽略換行符
     fgets
讀入一行,直到換行符
     fopen
打開文件,或者獲取打開文件的信息
     fprintf
格式化輸入數(shù)據(jù)到文件
     fread
從文件中讀取二進制數(shù)據(jù)
     frewind
將文件的位置指針移至文件開頭位置
     fscanf
格式化讀入
     fseek
設(shè)置文件位置指針
     ftell
文件位置指針
     fwrite
向文件中寫入數(shù)據(jù)
  
  下面重點介紹函數(shù)fprintf。該函數(shù)的調(diào)用格式如下:
  count = fprintf(fid, format, A, ...),該語句將矩陣A及后面其他參數(shù)中數(shù)字的實部以 format 指定的格式寫入到fid指定的文件中,返回寫入數(shù)據(jù)的字節(jié)數(shù)。
  上面語句中,參數(shù)format由%開頭,共可由4個部分組成,分別如下:
● 標(biāo)記(flag),為可選部分。
● 寬度和精度指示,為可選部分。
● 類型標(biāo)志符,為可選部分。
● 轉(zhuǎn)換字符,為必需部分。
  1. 標(biāo)記
  標(biāo)記用于控制輸出的對齊方式,可以選擇的內(nèi)容如表13-4所示。
表13-4 標(biāo)記的可選內(nèi)容
函    數(shù)
功    能
示    例
  負號(-)
           在參數(shù)左側(cè)進行判別
     %-5.2d
  加號(+)
           在數(shù)字前添加符號
     %+5.2d
  空格
           在數(shù)字前插入空格
     % 5.2d
  0
           在數(shù)字前插入0
     %05.2d
  2. 寬度和精度指示
  用戶可以通過數(shù)字指定輸出數(shù)字的寬度及精度,格式如下:
● %6f,指定數(shù)字的寬度;
● %6.2f,指定數(shù)字的寬度及精度;
● %.2f,指定數(shù)字的精度。
例13-6 fprintf函數(shù)寬度和精度指示符示例。
  在命令窗口中輸入如下命令:
  >> file_type = fopen('D:\type.txt','w');
  >> fprintf(file_h, '%6.2f %12.8f\n', 1.2, -43.3);
  >> fprintf(file_h, '%6f %12f\n', 1.2, -43.3);
  >> fprintf(file_h, '%.2f %.8f\n', 1.2, -43.3);
  >> fclose(file_h)
  ans =
       0
  打開該文件,其內(nèi)容為:
   1.20 -43.30000000
  1.200000   -43.300000
  1.20 -43.30000000
  從上述結(jié)果可以看出寬度和精度控制的效果。
  3. 轉(zhuǎn)換字符
  轉(zhuǎn)換字符用于指定輸出的符號,可以選擇的內(nèi)容如表13-5所示。
表13-5 格式化輸出的標(biāo)志符及意義
標(biāo) 志 符
意    義
     %c
輸出單個字符
     %d
輸出有符號十進制數(shù)
     %e
采用指數(shù)格式輸出,采用小寫字母 e,如:3.1415e+00
(續(xù)表)   
標(biāo) 志 符
意    義
     %E
采用指數(shù)格式輸出,采用大寫字母 E,如:3.1415E+00
     %f
以定點數(shù)的格式輸出
     %g
%e及%f的更緊湊的格式,不顯示數(shù)字中無效的 0
     %G
與%g相同,但是使用大寫字母E
     %i
有符號十進制數(shù)
     %o
無符號八進制數(shù)
     %s
輸出字符串
     %u
無符號十進制數(shù)
     %x
十六進制數(shù)(使用小寫字母a-f)
     %X
十六進制數(shù)(使用大寫字母A-F)
  
  其中 %o、%u、%x、%X支持使用子類型,具體情況這里不再贅述。格式化輸出標(biāo)志符的效果見下面的例子。
例13-7 fprintf 格式化輸出示例。
  >> x = 0:.1:1;
  >> y = [x; exp(x)];
  >> fid = fopen('exp.txt', 'wt');
  >> fprintf(fid, '%6.2f %12.8f\n', y);
  >> fclose(fid)
  ans =
       0
  顯示該文件:
  >> type exp.txt
   0.00   1.00000000
   0.10   1.10517092
  …
   0.90   2.45960311
   1.00   2.71828183
  例13-9 利用 fprintf 函數(shù)在顯示器上輸出字符串
  >> fprintf(1,'It''s Friday.\n')
  It's Friday.
  在該例中,利用1表示顯示器,并且用兩個單引號顯示單引號,使用\n進行換行。在格式化輸出中,這類符號稱為轉(zhuǎn)義符。MATLAB中的常用轉(zhuǎn)義符如表13-6所示。
  
  
表13-6 MATLAB中的常用轉(zhuǎn)義符
轉(zhuǎn) 義 符
功    能
   \b
              退格
   \f
              表格填充
   \n
              換行符
   \r
              回車
   \t
              tab
   \\
              \,反斜線
   \'' 或 ''
              ',單引號
   %%
              %,百分號
13.4 利用界面工具導(dǎo)入數(shù)據(jù)
  除前面幾節(jié)介紹的函數(shù)外,也可以通過界面工具將數(shù)據(jù)導(dǎo)入到工作區(qū)中。本節(jié)介紹利用工作區(qū)瀏覽器中的工具導(dǎo)入數(shù)據(jù)。
  選擇工作區(qū)瀏覽器工具欄中的“Import Data”,選擇待導(dǎo)入的文件,這里我們選擇了一個文本文件,其內(nèi)容為逗號分隔的數(shù)字,打開窗口如圖13-3所示。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
怎樣從matlab中讀取csv文件?
Matlab 文件讀寫函數(shù)
Matlab中數(shù)據(jù)的輸入與輸出
Matlab中save函數(shù)的使用
uigetfile命令的應(yīng)用
matlab的各種數(shù)據(jù)讀?。╰xt,dat,mat等格式),文件打開關(guān)閉
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服