日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

MATLAB(六)数据处理

發(fā)布時(shí)間:2024/7/23 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB(六)数据处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Matlab中的默認(rèn)數(shù)據(jù)文件mat文件

例1、把Matlab工作空間中的數(shù)據(jù)矩陣a、b、c保存到數(shù)據(jù)文件data1.mat中。

>> a = [1, 2, 3] a =1 2 3 >> b = [4, 5, 6] b =4 5 6 >> c = [7, 8, 9] c =7 8 9 >> save data1 a b c

例2、把例1生成的data1.mat中的所有數(shù)據(jù)加載到Matlab工作空間中。

>> load('data1.mat')

二、純文本文件

可以把word文檔中整行整列的數(shù)據(jù)粘貼到純文本文件,然后調(diào)入到Matlab工作空間中。

例3、把純文本文件data2.txt加載到工作空間。

>> a = load('data2.txt') a =1 2 3 4 56 7 8 9 10

或者用textread() 函數(shù),加載數(shù)據(jù)到工作空間,需要注意加載數(shù)據(jù)的類型

>> a = textread('data2.txt') a =1 2 3 4 56 7 8 9 10

如果數(shù)據(jù)不是規(guī)則的,則這兩個(gè)函數(shù)的處理還是有差別的,textread()函數(shù)會(huì)自動(dòng)對(duì)缺失的數(shù)據(jù)用0進(jìn)行填補(bǔ),而load函數(shù)直接報(bào)錯(cuò);

>> a = load('data2.txt') 錯(cuò)誤使用 load ASCII 文件 data2.txt 的第 2 行中的列數(shù)必須與前面行中的列數(shù)相同。 >> a = textread('data2.txt') a =1 2 34 5 0

例4、使用dlmwrite命令把矩陣b保存到純文本文件data3.txt中。

>> b = [1 2 3] b =1 2 3 >> dlmwrite('data3.txt', b)

例5、生成服從標(biāo)準(zhǔn)正太分布隨機(jī)數(shù)的100x200矩陣,然后用fprintf命令保存到純文本文件data4.txt中。

clc, clear fid = fopen('data4.txt', 'w'); a = normrnd(0, 1, 100, 200); %0,1表示的是隨機(jī)數(shù)的取值范圍 fprintf(fid, '%f\n', a'); % 將產(chǎn)生的數(shù)據(jù)a保存到打開的data4.txt文件中 fclose(fid); % 關(guān)閉data4.txt文件

?

注:對(duì)于高維矩陣用dlmwrite構(gòu)造的純文本文件,Lingo軟件不識(shí)別;為了Lingo軟件識(shí)別,純文本文件必須用fprintf構(gòu)造,而且數(shù)據(jù)之間的分割符為“\n”。

三、Excel文件

例6、把一個(gè)5x10矩陣寫到Excel文件data5.xls表單Sheet2中B2開始的域中。

clc, clear a = rand(5, 10); xlswrite('data5.xls', a, 'Sheet2', 'B2')

例7、把例6生成的Excel文件data5.xls中表單Sheet2的域“C3:F6”中的數(shù)據(jù)賦值給b。

>> b = xlsread('data5.xls', 'Sheet2', 'C3:F6') b =0.231662966604022 0.989774818941714 0.782489349911504 0.1458589734751690.209023331509194 0.722841980854519 0.646446071734880 0.7180582712878980.609870564311474 0.828393537955305 0.991485577448960 0.2874756020793170.612317772839133 0.365553588875753 0.775034954080905 0.603066961251474

四、字符串?dāng)?shù)據(jù)

例8、統(tǒng)計(jì)下列五行字符串中字符a、c、g、t出現(xiàn)的頻數(shù)。

clc, clear fid = fopen('data6.txt', 'r'); i = 1; while(~feof(fid))data = fgetl(fid);a = sum(data == 97);b = sum(data == 99);c = sum(data == 103);d = sum(data == 116);e = sum(data >= 97 & data <= 122);f(i, :) = [a b c d e a+b+c+d];i = i + 1; end f he = sum(f) fclose(fid); f =2 0 5 1 65 82 3 5 3 62 132 3 2 2 58 95 3 4 0 64 126 5 2 3 63 16 he =17 14 18 9 312 58

其他的一些字符串處理命令有strcmp、strfind等。

五、圖像文件

例9、把一個(gè)比較大的bmp圖像文件data7.bmp,轉(zhuǎn)化成比較小的jpg文件,命名為data7.jpg,并顯示。

clc,clear a = imread('data7.bmp'); imshow(a) imwrite(a, 'data7.jpg'); figure imshow('data7.jpg')

?例10、生成10幅彩色jpg文件,依次命名為jpg1.jpg,......,jpg10.jpg。

clc,clear for i = 1:10str = ['jpg', int2str(i), '.jpg'];a(:,:,1) = rand(500);a(:,:,2) = rand(500) + 100;a(:,:,3) = rand(500) + 200;imwrite(a, str); end

六、數(shù)據(jù)的批處理

例11、現(xiàn)有數(shù)據(jù)文件book1.xls,......,book5.xls,用命令importdata讀入數(shù)據(jù)。

clc,clear n = 5; mydata = cell(1, n); for k = 1:nfilename = sprintf('book%d.xlsx', k); % 構(gòu)造文件名的格式化字符串mydata{k} = importdata(filename); % 從文件導(dǎo)入數(shù)據(jù) end celldisp(mydata) % 顯示細(xì)胞數(shù)據(jù)的數(shù)據(jù)

注意:xls文件必須是微軟office創(chuàng)建的文件,否則,讀取文件時(shí)會(huì)出現(xiàn)錯(cuò)誤。?

mydata{1} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct] mydata{2} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct] mydata{3} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct] mydata{4} =Sheet1: {'8iiy8u'} mydata{5} =Sheet1: {'uykyu' 'j546'}

例12、現(xiàn)有數(shù)據(jù)文件book01.xls,...,book05.xls,讀取各Excel文件的第1個(gè)表單(Sheet1)的域“A2:C10”的數(shù)據(jù)。

clc,clear n = 5; range = 'A2:C10'; sheet = 1; myData = cell(1, n); for k=1:nfileName = sprintf('book0%d.xls', k);myData{k} = xlsread(fileName, sheet, range); end celldisp(myData) % 顯示細(xì)胞數(shù)組的數(shù)據(jù) myData{1} =1 1 11 1 11 1 11 1 11 1 11 1 11 1 11 1 11 1 1 myData{2} =2 2 22 2 22 2 22 2 22 2 22 2 22 2 22 2 22 2 2 myData{3} =3 3 33 3 33 3 33 3 33 3 33 3 33 3 33 3 33 3 3 myData{4} =4 4 44 4 44 4 44 4 44 4 44 4 44 4 44 4 44 4 4 myData{5} =5 5 55 5 55 5 55 5 55 5 55 5 55 5 55 5 55 5 5

例13、讀入當(dāng)前目錄下所有后綴名為xls的Excel文件的數(shù)據(jù)。

clc,clear fi = dir('*.xls'); % 提出Excel文件的信息,返回值是結(jié)構(gòu)數(shù)據(jù) n = length(fi); % 計(jì)算Excel文件的個(gè)數(shù) myData = cell(1, n); for k = 1:nmyData{k} = importdata(fi(k).name); end celldisp(myData) % 顯示細(xì)胞數(shù)組的數(shù)據(jù) myData{1} =Sheet1: [9×3 double] myData{2} =Sheet1: [9×3 double] myData{3} =Sheet1: [9×3 double] myData{4} =Sheet1: [9×3 double] myData{5} =Sheet1: [9×3 double] myData{6} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct] myData{7} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct] myData{8} =data: [1×1 struct]textdata: [1×1 struct]rowheaders: [1×1 struct] myData{9} =Sheet1: {'8iiy8u'} myData{10} =Sheet1: {'uykyu' 'j546'} myData{11} =Sheet2: [5×10 double]

七、時(shí)間序列數(shù)據(jù)

例14、時(shí)間序列數(shù)據(jù)的處理

clc,clear randn('seed', sum(100*clock)); % 初始化隨機(jī)數(shù)發(fā)生器 a = randn(6, 1); % 生成服從標(biāo)準(zhǔn)正太分布的偽隨機(jī)數(shù) b = [today:today+5]' % 從今天到后面5天 fts = fints(b,a) % 生成fints格式數(shù)據(jù) fts(3) = NaN; % 將第三個(gè)數(shù)據(jù)變?yōu)槿笔е?newdata = fillts(fts, 'linear') % 用線性插值填補(bǔ)時(shí)間序列中的缺失數(shù)據(jù) data = fts2mat(newdata) % 時(shí)間序列數(shù)據(jù)轉(zhuǎn)為普通數(shù)據(jù) b =737538737539737540737541737542737543fts = desc: (none)freq: Unknown (0)'dates: (6)' 'series1: (6)' '23-Apr-2019' [ 0.886860381620918]'24-Apr-2019' [ 0.460999512887512]'25-Apr-2019' [-0.215670586672620]'26-Apr-2019' [-0.009709957146119]'27-Apr-2019' [-0.726552476730568]'28-Apr-2019' [ 0.090572270848305]newdata = desc: Filled freq: Unknown (0)'dates: (6)' 'series1: (6)' '23-Apr-2019' [ 0.886860381620918]'24-Apr-2019' [ 0.460999512887512]'25-Apr-2019' [ 0.225644777870696]'26-Apr-2019' [-0.009709957146119]'27-Apr-2019' [-0.726552476730568]'28-Apr-2019' [ 0.090572270848305] data =0.8868603816209180.4609995128875120.225644777870696-0.009709957146119-0.7265524767305680.090572270848305

例15、對(duì)于Matlab當(dāng)前工作路徑下所有時(shí)間序列型的純文本文件,進(jìn)行相關(guān)的數(shù)據(jù)操作。

clc,clear tf = dir('*.txt') % 提出純文本文件的信息,返回值是結(jié)構(gòu)數(shù)據(jù) n = length(tf); % 計(jì)算純文本文件的個(gè)數(shù) fts = ascii2fts(tf(1).name); % 讀第一個(gè)文件中的時(shí)間序列數(shù)據(jù) fts = extfield(fts, {'series2', 'series3'}); % 提出第二個(gè)字段和第三個(gè)字段 for i=2:ntp1 = ascii2fts(tf(i).name); % 讀取時(shí)間序列數(shù)據(jù)tp2 = extfield(fts, {'series2', 'series3'}); % 提出第2,3字段str1 = ['series', num2str(2*i)];str2 = ['series', num2str(2*i+1)];tp3 = fints(tp2.dates, fts2mat(tp2), {str1,str2}); % 把時(shí)間序列改名fts = merge(fts, tp3); % 合并兩個(gè)時(shí)間序列的數(shù)據(jù) end fts % 顯示合并提出的兩個(gè)字段數(shù)據(jù)

八、日期和時(shí)間

Matlab日期和時(shí)間的函數(shù)有datenum,datevec,datestr,now,clock,date,calendar,eomday,weekday,addtodate,etime等,這里就不一一說(shuō)明各個(gè)函數(shù)的用法了,下面舉例說(shuō)明有關(guān)函數(shù)的使用。

例16、統(tǒng)計(jì)1601年1月到2000年12月,每月的13日分別出現(xiàn)在星期日、星期一、星期二,...,星期六的頻數(shù),并畫出對(duì)應(yīng)的柱狀圖。注:Matlab中weekday的1對(duì)應(yīng)“星期日”,2對(duì)應(yīng)“星期一”,......,7對(duì)應(yīng)“星期六”。

clc,clear c = zeros(1,7); for y=1601:2000for m=1:12d = datenum(y, m, 13);w = weekday(d);c(w) = c(w) + 1;end end c,bar(c) %顯示頻數(shù)并畫出頻數(shù)的柱狀圖 axis([0 8 680 690]) line([0, 8], [4800/7, 4800/7], 'linewidth', 4, 'color', 'k') set(gca, 'xticklabel', {'Su', 'M', 'Tu', 'W', 'Th', 'F', 'Sa'}) c =687 685 685 687 684 688 684

九、視頻文件

? ? ? ? Matlab除了支持各種圖像文件的讀寫等操作,還支持視頻文件的相應(yīng)處理。實(shí)際上,視頻文件本質(zhì)上是由多幀具有一定大小、順序、格式的圖像組成的,只是一般的圖像是靜止的,而視頻是可以將多幀靜止的圖像進(jìn)行連續(xù)顯示,從而達(dá)到動(dòng)態(tài)效果。

例17、讀取一個(gè)視頻文件text.mp4,并把視頻中的每一幀保存成jpg文件。

clc,clear ob = VideoReader('test.mp4') % 讀取視頻文件對(duì)象 get(ob) % 獲取視頻對(duì)象的參數(shù) n = ob.NumberOfFrame; % 獲取視頻的總幀數(shù) for i = 1:na = read(ob, i); % 讀取視頻對(duì)象的第i幀imshow(a) % 顯示第i幀圖像str = ['source\', int2str(i), '.jpg']; % 構(gòu)造文件名的字符串,目錄source要提前建好imwrite(a, str); % 把第i幀保存到j(luò)pg文件 end ob = VideoReader (具有屬性):常規(guī)屬性:Name: 'test.mp4'Path: 'D:\matlab_workspace\文件夾3\數(shù)據(jù)處理'Duration: 9.945333000000000CurrentTime: 0Tag: ''UserData: []視頻屬性:Width: 320Height: 176FrameRate: 25BitsPerPixel: 24VideoFormat: 'RGB24' obj = VideoReader (具有屬性):常規(guī)屬性:Name: 'test.mp4'Path: 'D:\matlab_workspace\文件夾3\數(shù)據(jù)處理'Duration: 9.945333000000000CurrentTime: 0Tag: ''UserData: []視頻屬性:Width: 320Height: 176FrameRate: 25BitsPerPixel: 24VideoFormat: 'RGB24'

?

?

總結(jié)

以上是生活随笔為你收集整理的MATLAB(六)数据处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。