日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MATLAB(六)数据处理

發布時間:2024/7/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MATLAB(六)数据处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、Matlab中的默認數據文件mat文件

例1、把Matlab工作空間中的數據矩陣a、b、c保存到數據文件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中的所有數據加載到Matlab工作空間中。

>> load('data1.mat')

二、純文本文件

可以把word文檔中整行整列的數據粘貼到純文本文件,然后調入到Matlab工作空間中。

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

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

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

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

如果數據不是規則的,則這兩個函數的處理還是有差別的,textread()函數會自動對缺失的數據用0進行填補,而load函數直接報錯;

>> a = load('data2.txt') 錯誤使用 load ASCII 文件 data2.txt 的第 2 行中的列數必須與前面行中的列數相同。 >> 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、生成服從標準正太分布隨機數的100x200矩陣,然后用fprintf命令保存到純文本文件data4.txt中。

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

?

注:對于高維矩陣用dlmwrite構造的純文本文件,Lingo軟件不識別;為了Lingo軟件識別,純文本文件必須用fprintf構造,而且數據之間的分割符為“\n”。

三、Excel文件

例6、把一個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”中的數據賦值給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

四、字符串數據

例8、統計下列五行字符串中字符a、c、g、t出現的頻數。

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、把一個比較大的bmp圖像文件data7.bmp,轉化成比較小的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

六、數據的批處理

例11、現有數據文件book1.xls,......,book5.xls,用命令importdata讀入數據。

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

注意:xls文件必須是微軟office創建的文件,否則,讀取文件時會出現錯誤。?

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、現有數據文件book01.xls,...,book05.xls,讀取各Excel文件的第1個表單(Sheet1)的域“A2:C10”的數據。

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) % 顯示細胞數組的數據 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、讀入當前目錄下所有后綴名為xls的Excel文件的數據。

clc,clear fi = dir('*.xls'); % 提出Excel文件的信息,返回值是結構數據 n = length(fi); % 計算Excel文件的個數 myData = cell(1, n); for k = 1:nmyData{k} = importdata(fi(k).name); end celldisp(myData) % 顯示細胞數組的數據 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]

七、時間序列數據

例14、時間序列數據的處理

clc,clear randn('seed', sum(100*clock)); % 初始化隨機數發生器 a = randn(6, 1); % 生成服從標準正太分布的偽隨機數 b = [today:today+5]' % 從今天到后面5天 fts = fints(b,a) % 生成fints格式數據 fts(3) = NaN; % 將第三個數據變為缺失值 newdata = fillts(fts, 'linear') % 用線性插值填補時間序列中的缺失數據 data = fts2mat(newdata) % 時間序列數據轉為普通數據 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、對于Matlab當前工作路徑下所有時間序列型的純文本文件,進行相關的數據操作。

clc,clear tf = dir('*.txt') % 提出純文本文件的信息,返回值是結構數據 n = length(tf); % 計算純文本文件的個數 fts = ascii2fts(tf(1).name); % 讀第一個文件中的時間序列數據 fts = extfield(fts, {'series2', 'series3'}); % 提出第二個字段和第三個字段 for i=2:ntp1 = ascii2fts(tf(i).name); % 讀取時間序列數據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}); % 把時間序列改名fts = merge(fts, tp3); % 合并兩個時間序列的數據 end fts % 顯示合并提出的兩個字段數據

八、日期和時間

Matlab日期和時間的函數有datenum,datevec,datestr,now,clock,date,calendar,eomday,weekday,addtodate,etime等,這里就不一一說明各個函數的用法了,下面舉例說明有關函數的使用。

例16、統計1601年1月到2000年12月,每月的13日分別出現在星期日、星期一、星期二,...,星期六的頻數,并畫出對應的柱狀圖。注:Matlab中weekday的1對應“星期日”,2對應“星期一”,......,7對應“星期六”。

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) %顯示頻數并畫出頻數的柱狀圖 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除了支持各種圖像文件的讀寫等操作,還支持視頻文件的相應處理。實際上,視頻文件本質上是由多幀具有一定大小、順序、格式的圖像組成的,只是一般的圖像是靜止的,而視頻是可以將多幀靜止的圖像進行連續顯示,從而達到動態效果。

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

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

?

?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。