matlab數(shù)據(jù)的獲取、預(yù)處理、統(tǒng)計(jì)、可視化、降維
數(shù)據(jù)的預(yù)處理 - MATLAB & Simulink - MathWorks 中國https://ww2.mathworks.cn/help/matlab/preprocessing-data.html
一、數(shù)據(jù)的獲取
1.1 從Excel中獲取
使用readtable()
例1:
使用spreadsheetImportOptions(Name,Value)初步確定導(dǎo)入信息,
再用opts.Name=Value的格式添加。
% 工作簿: C:\Users\Hao\Desktop\程序_MATLAB數(shù)學(xué)建模方法與實(shí)踐_卓金武等\Cha2\sz000004.xls
% 工作表: Sheet1
%% 設(shè)置導(dǎo)入選項(xiàng)并導(dǎo)入數(shù)據(jù)
opts = spreadsheetImportOptions("NumVariables", 8);%變量數(shù)8
%spreadsheetImportOptions允許指定 MATLAB? 如何從電子表格文件中導(dǎo)入表格數(shù)據(jù)
% 指定工作表和范圍
opts.Sheet = "Sheet1";
opts.DataRange = "A1:H45";
% 指定列名稱和類型
opts.VariableNames = ["Date", "DateNum", "Popen", "Phigh", "Plow", "Pclose", "Volum", "Turn"];
opts.VariableTypes = ["double", "double", "double", "double", "double", "double", "double", "double"];
% 導(dǎo)入數(shù)據(jù)
sz000004 = readtable("C:\Users\Hao\Desktop\程序_MATLAB數(shù)學(xué)建模方法與實(shí)踐_卓金武等\Cha2\sz000004.xls", opts, "UseExcel", false);
%% 清除臨時(shí)變量
clear opts
例2:
先初始化spreadsheetImportOptions對(duì)象,
再用opts.Name=Value的格式逐個(gè)添加。
% 初始化 SpreadsheetImportOptions 對(duì)象
opts = spreadsheetImportOptions;
% 指定變量名稱
opts.VariableNames = 'LastName';
% 變量類型
opts.VariableTypes = 'categorical';
% 數(shù)據(jù)起始單元格
opts.DataRange = 'A2';
% 使用導(dǎo)入選項(xiàng)預(yù)覽文件中的八行數(shù)據(jù)
preview('patients.xls',opts)
oneVar = readtable('patients.xls',opts);
% 列出變量及大小和類型
whos oneVar
例3:
將導(dǎo)入信息存到變量里,
再使用spreadsheetImportOptions(Name,Value)添加導(dǎo)入信息。
% 變量數(shù)
numVars = 7;
% 變量名稱
varNames = {'LastName','Gender','Age','Location','Height','Weight','Smoker'} ;
% 變量類型
varTypes = {'char','categorical','int32','char','double','double','logical'} ;
% 數(shù)據(jù)起始單元格
dataStartLoc = 'A2';
% 使用 spreadsheetImportOptions 函數(shù)和變量信息初始化導(dǎo)入選項(xiàng)對(duì)象 opts
opts = spreadsheetImportOptions('NumVariables',numVars,...
'VariableNames',varNames,...
'VariableTypes',varTypes,...
'DataRange', dataStartLoc);
% 使用導(dǎo)入選項(xiàng)預(yù)覽文件中的八行數(shù)據(jù)
preview('patients.xls',opts)
% 使用 readtable 導(dǎo)入數(shù)據(jù)
T = readtable('patients.xls',opts);
% 列出變量及大小和類型
whos T
注:readtable
?僅支持下列名稱-值對(duì)組:
文本和電子表格參數(shù) -?
ReadVariableNames
、ReadRowNames
僅文本參數(shù) -?
DateLocale
、Encoding
僅電子表格參數(shù) -?
Sheet
、UseExcel
使用xlsread()——xlswrite()
a=xlsread('C:\Coporation_evaluation.xlsx',2,'A2:I16')
% 'C:\Coporation_evaluation.xlsx' 表示讀入Excel數(shù)據(jù)所在位置
% 2 表示位于sheet2
% 'A2:I16' 表示讀入的數(shù)據(jù)范圍
a=xlswrite('C:\Coporation_evaluation.xlsx',a,3,'B1:C5')
% 'C:\Coporation_evaluation.xlsx' 表示寫入Excel工作簿所在位置,若不存在會(huì)自動(dòng)創(chuàng)建
% a 表示待寫入的數(shù)據(jù)
% 3 表示sheet3
% 'B1:C5' 表示寫入Excel中的的具體位置
[data,textdata] = xlsread('D:\桌面\xx.xls'),讀取的是什么
- 從文件路徑為
D:\桌面\xx.xls
的 Excel 文件中讀取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到兩個(gè)變量data
和textdata
中。- 其中,
xlsread()
是 MATLAB 內(nèi)置函數(shù),用于讀取 Excel 文件中的數(shù)據(jù)。- 第一個(gè)輸入?yún)?shù)
'D:\桌面\aa.xls'
表示了 Excel 文件的全路徑,可以根據(jù)實(shí)際情況修改該值。- 第二個(gè)參數(shù)為空,則函數(shù)默認(rèn)讀取所有數(shù)值型數(shù)據(jù);如果指定第二個(gè)輸出參數(shù)名稱(如此例中的
textdata
),則函數(shù)會(huì)將 Excel 文件中的文本數(shù)據(jù)存儲(chǔ)到該變量中。
假設(shè)我們有一個(gè) Excel 文件,文件路徑為 D:\桌面\data.xlsx
,它包含以下數(shù)據(jù):
A | B | C | |
1 | 10 | 20 | a |
2 | 30 | 40 | b |
那么,我們可以使用以下 MATLAB 代碼讀取該文件中的數(shù)值型和文本數(shù)據(jù):
[data, textdata] = xlsread('D:\桌面\data.xlsx');
執(zhí)行上述代碼后,MATLAB 會(huì)將該 Excel 文件中的數(shù)值型數(shù)據(jù)存儲(chǔ)到 data
變量中,文本數(shù)據(jù)存儲(chǔ)到 textdata
變量中。此時(shí)可以在 MATLAB 命令窗口中輸入這兩個(gè)變量名,查看其內(nèi)容:
data =
10 20
30 40
textdata =
2×1 cell 數(shù)組
{2×1 cell}
{2×1 cell}
>> textdata{1}
ans =
'a'
>> textdata{2}
ans =
'b'
- 可見,MATLAB 已經(jīng)成功地讀取了 Excel 文件中的數(shù)據(jù),并將其存儲(chǔ)到相應(yīng)的變量中。
- 其中,
textdata
變量是一個(gè) 2x1 的單元格數(shù)組,每個(gè)單元格中存儲(chǔ)了一列文本數(shù)據(jù)。 - 我們可以使用花括號(hào)
{}
來訪問單元格中的內(nèi)容,如textdata{1}
訪問第一列的文本數(shù)據(jù)。
1.2? 從TXT中獲取
使用load()
% 生成線性間距向量,返回包含 1 和 30 之間的 8(默認(rèn)100)個(gè)等間距點(diǎn)的行向量
a=linspace(1,30,8);
save d:\exper.txt a -ascii;
b=load('d:\exper.txt')
% save d:\exper.txt a -ascii; 把a(bǔ)以ASCII碼的形式存儲(chǔ)在D盤的exper.txt中,若不存在會(huì)自動(dòng)創(chuàng)建
% b=load('d:\exper.txt') 讀取'd:\exper.txt'中的數(shù)據(jù),并儲(chǔ)存在變量b中
使用textread()
[A,B,C,...]=textread('filename','format',N,'headerlines',M)
% filename 表示txt文件名稱
% format 表示所讀取變量的字段格式
% N 表示讀取的次數(shù)
% headerlines 表示從第M+1行開始讀取
使用字面值讀取以忽略匹配的字符https://blog.csdn.net/jk_101/article/details/106495696
[name,type,x,y,answer]=textread('D:t.txt','%s Type%d %f %n %s',2,...
'headerlines',1)
% 格式Type%d只顯示%d,因?yàn)樵瓟?shù)據(jù)為Type1,Type2,Type3,Type4
例如:
mydata.dat 的第一行如下:
Sally Type1 12.34 45 Yes
?讀取文件的第一行,并忽略第二個(gè)字段中的字符 Type。
[names, typenum, x, y, answer] = textread('mydata.dat', ...
'%s Type%d %f %d %s', 1)
返回
names =
'Sally'
typenum =
1
x =
12.34000000000000
y =
45
answer =
'Yes'
使用fopen() fread() fclose()?
例:
讀取.m文件中的字符(讀取txt文件也可以)
% 用函數(shù)fopen打開文件,r代表只讀形式打開,w代表寫入形式打開,a代表在文件末尾添加內(nèi)容
fid=fopen('D:\CRM4.m','r'); % fid=fopen('D:\CRM4.m','w')/fid=fopen('D:\CRM4.m','a')
% 以字符形式讀取整個(gè)文本
var=fread(fid,'*char');
% 將中文字段轉(zhuǎn)換為相應(yīng)的2字節(jié)代碼,否則輸出可能會(huì)亂碼
var=native2unicode(var)
fclose(fid)
使用fprintf()寫入信息到txt
fprintf('file','format',a1,a2...)
% file 表示文件路徑
% format 表示數(shù)據(jù)寫入類型
% a 表示要寫入的數(shù)據(jù)內(nèi)容
1.3?從圖片中獲取
%% 讀取圖片
clc, clear, close all
a1=imread('000.bmp');
% 獲得像素矩陣行數(shù)列數(shù)
[m,n]=size(a1);
%% 批量讀取圖片
dirname = 'ImageChips'; % 'ImageChips'文件夾
files = dir(fullfile(dirname, '*.bmp'));
%% fuiifile用法
% f = fullfile('myfolder','mysubfolder','myfile.m')
% f = 'myfolder/mysubfolder/myfile.m'
%% dir用法
% dir name 列出與 name 匹配的文件和文件夾。如果 name 為文件夾,dir 列出該文件夾的內(nèi)容。使用絕對(duì)
% 或相對(duì)路徑名稱指定 name。name 參數(shù)的文件名可以包含 * 通配符,路徑名稱可以包含 * 和 ** 通配符。
% 與** 通配符相鄰的字符必須為文件分隔符。
a=zeros(m,n,19); % 創(chuàng)建全零數(shù)組19個(gè)m*n數(shù)組,共19張圖片
pic=[];
for ii = 1:length(files)
filename = fullfile(dirname, files(ii).name);
a(:,:,ii)=imread(filename); % 將該圖片信息讀取到a的第ii個(gè)數(shù)組里
pic=[pic,a(:,:,ii)]; % 拼接圖像
end
double(pic);
figure
imshow(pic,[])
% imshow(I,[low high]) 顯示灰度圖像 I,以二元素向量 [low high] 形式指定顯示范圍
% 若為[],使用 [min(I(:)) max(I(:))] 的顯示范圍。換句話說,I 中的最小值是黑色,最大值是白色
1.4 從視頻獲取?
使用視覺工具箱中的VideoFileReader?
%% 讀取視頻數(shù)據(jù)
% 從視頻文件中讀取視頻幀、圖像和音頻樣本
videoFReader = vision.VideoFileReader('vippedtracking.mp4');
% 播放視頻文件
videoPlayer = vision.VideoPlayer;
while ~isDone(videoFReader)
% 當(dāng)來自有限數(shù)據(jù)源的數(shù)據(jù)取完時(shí)(通常是因?yàn)橐炎x取所有數(shù)據(jù)),isDone(obj)返回true
% ~邏輯非
videoFrame = step(videoFReader); % 運(yùn)行videoFReader算法,返回輸出參數(shù)
step(videoPlayer, videoFrame); % 對(duì)videoFrame運(yùn)行videoPlayer算法
end
release(videoPlayer); %釋放資源
%% 設(shè)置播放方式
% 重置播放器
reset(videoFReader) % 將圖形對(duì)象屬性重置為其默認(rèn)值
% 增加播放器的尺寸
r = groot; % r = groot 用于存儲(chǔ)圖形根對(duì)象的句柄。要使用圓點(diǎn)表示法設(shè)置根屬性,首先必須存儲(chǔ)句柄
scrPos = r.ScreenSize;
% Size/position is always a 4-element vector: [x0 y0 dx dy]
dx = scrPos(3); dy = scrPos(4);
videoPlayer = vision.VideoPlayer('Position',[dx/8, dy/8, dx*(3/4), dy*(3/4)]);
% 指定左下角和右上角的坐標(biāo)
while ~isDone(videoFReader)
videoFrame = step(videoFReader);
step(videoPlayer, videoFrame);
end
release(videoPlayer);
reset(videoFReader)
%% 獲取視頻中的圖像
videoFrame = step(videoFReader);
n = 0;
while n~=15
videoFrame = step(videoFReader);
n = n+1;
end
figure, imshow(videoFrame) % 獲得第15張圖像
release(videoPlayer);
Matlab中fopen函數(shù)用法https://blog.csdn.net/jk_101/article/details/106494232
二、數(shù)據(jù)的預(yù)處理
數(shù)據(jù)質(zhì)量三要素:準(zhǔn)確性、完整性、一致性(格式不一致等)
兩個(gè)影響因素:可信性(多少是用戶信賴的)、可解釋性 (是否容易理解)
數(shù)據(jù)類型的轉(zhuǎn)換https://zhuanlan.zhihu.com/p/217597511?
缺失值處理:
一般可刪除記錄、數(shù)據(jù)插補(bǔ)和不處理。https://blog.csdn.net/yunlinzi/article/details/90300113
可插補(bǔ)方法 | 方法描述 |
均值/中位數(shù)/眾數(shù)插補(bǔ) | 根據(jù)屬性值的類型, 用該屬性取值的平均數(shù)/中位數(shù)/眾數(shù)進(jìn)行插補(bǔ)。 |
使用固定值 | 將缺失的屬性值用一個(gè)常量替換。 如廣州一個(gè)工廠普通外來務(wù)工人員的“基本工資”屬性的空缺值, 可以用2015年廣州市普通外來務(wù)工人員工資標(biāo)準(zhǔn)1895元月, 該方法就是使用固定值。 |
最近臨插補(bǔ) | 在記錄中找到與缺失樣本最接近的樣本的該屬性值插補(bǔ) |
回歸方法 | 對(duì)帶有缺失值的變量,根據(jù)已有數(shù)據(jù)和與其有關(guān)的其他變量(因變量)的數(shù)據(jù)建立擬合模型來預(yù)測缺失的屬性值。 |
插值法 | 插值法是利用已知點(diǎn)建立合適的插值函數(shù)f(x), 未知值由對(duì)應(yīng)點(diǎn)求出的函數(shù)值f(x,)近似代替。 |
插值與擬合
插值與擬合的區(qū)別和聯(lián)系
1、聯(lián)系
??? 都是根據(jù)實(shí)際中一組已知數(shù)據(jù)來構(gòu)造一個(gè)能夠反映數(shù)據(jù)變化規(guī)律的近似函數(shù)的方法。
2、區(qū)別
??? 插值問題不一定得到近似函數(shù)的表達(dá)形式,僅通過插值方法找到未知點(diǎn)對(duì)應(yīng)的值。
數(shù)據(jù)擬合要求得到一個(gè)具體的近似函數(shù)的表達(dá)式。
插值方法
????????選用不同類型的插值函數(shù),逼近的效果就不同,一般有:
(1)最近鄰算法插值(一維插值)
(2)拉格朗日插值算法(一維插值)
(3)雙線性內(nèi)插算法(二維插值)
(4)分段線性插值(二維插值)
(5)三次樣條插值(二維插值)
(6)克里金插值(地理學(xué))
(7)反距離權(quán)重插值算法(地理學(xué))
- Matlab?實(shí)現(xiàn):實(shí)現(xiàn)分段線性插值不需要編制函數(shù)程序,它自身提供了內(nèi)部的功能函數(shù)https://blog.csdn.net/qq_36666756/article/details/81983385
- interp1(一維插值)
- interp2(二維)
- interp3(三維)
- intern(n維)
例:從1點(diǎn)12點(diǎn)的11小時(shí)內(nèi),每隔1小時(shí)測量一次溫度,測得的溫度的數(shù)值依次為:5,8,9,15,25,29,31,30,22,25,27,24.試估計(jì)每隔1/10小時(shí)的溫度值.
hours=1:12;
temps=[5 8 9 15 25 29 31 30 22 25 27 24];
h=1:0.1:12;
t=interp1(hours,temps,h,'spline');
plot(hours,temps,'+',h,t,hours,temps,'r:') %作圖
xlabel('Hour'),ylabel('Degrees Celsius’)
%1.先在三維坐標(biāo)畫出原始數(shù)據(jù),畫出粗糙的溫度分布曲線圖.
%輸入以下命令:
x=1:5;
y=1:3;
temps=[82 81 80 82 84;79 63 61 65 81;84 84 82 85 86];
mesh(x,y,temps)
%2.以平滑數(shù)據(jù),在 x、y方向上每隔0.2個(gè)單位的地方進(jìn)行插值.
再輸入以下命令:
xi=1:0.2:5;
yi=1:0.2:3;
zi=interp2(x,y,temps,xi',yi,'cubic');
mesh(xi,yi,zi)
%畫出插值后的溫度分布曲面圖.
例 在某海域測得一些點(diǎn)(x,y)處的水深z由下表給出,船的吃水深度為5英尺,在矩形區(qū)域(75,200)×(-50,150)里的哪些地方船要避免進(jìn)入.?
%1.輸入插值基點(diǎn)數(shù)據(jù)
%2.在矩形區(qū)域(75,200)×(-50,150)進(jìn)行插值。
%3. 作海底曲面圖
%4.作出水深小于5的海域范圍,即z=5的等高線
%程序一:插值并作海底曲面圖
x =[129.0 140.0 103.5 88.0 185.5 195.0 105.5 157.5 107.5 77.0 81.0 162.0 162.0 117.5 ];
y =[ 7.5 141.5 23.0 147.0 22.5 137.5 85.5 -6.5 -81 3.0 56.5 -66.5 84.0 -33.5 ];
z =[ 4 8 6 8 6 8 8 9 9 8 8 9 4 9 ];
x1=75:1:200;
y1=-50:1:150;
[x1,y1]=meshgrid(x1,y1);
z1=griddata(x,y,z,x1,y1,'v4');
meshc(x1,y1,z1)
%程序二:插值并作出水深小于5的海域范圍。
x1=75:1:200;
y1=-50:1:150;
[x1,y1]=meshgrid(x1,y1);
z1=griddata(x,y,z,x1,y1,'v4'); %插值
z1(z1>=5)=nan; %將水深大于5的置為nan,這樣繪圖就不會(huì)顯示出來
meshc(x1,y1,z1)
異常值處理:
- 異常值是數(shù)據(jù)集中偏離大部分?jǐn)?shù)據(jù)的數(shù)據(jù)。
- 從數(shù)據(jù)值上表現(xiàn)為:數(shù)據(jù)集中與平均值的偏差超過兩倍標(biāo)準(zhǔn)差的數(shù)據(jù),
- 其中與平均值的偏差超過三倍標(biāo)準(zhǔn)差的數(shù)據(jù),稱為高度異常的異常值。
小波異常值提取
?????信號(hào)的突變點(diǎn)和奇異點(diǎn)等不規(guī)則部分通常包含重要信息,一般信號(hào)的奇異性分為兩種情況:
- ? ? 信號(hào)在某一時(shí)刻其幅值發(fā)生突變,引起信號(hào)的非連續(xù),這種類型的突變稱為第一類型的間斷點(diǎn);??
- ? ? 信號(hào)在外觀上很光滑,幅值沒有發(fā)生突變,但是信號(hào)的一階微分有突變發(fā)生且一階微分不連續(xù),這種類型的突變稱為第二類型的間斷點(diǎn)。
- ?????應(yīng)用小波分析可以檢測出信號(hào)中的突變點(diǎn)的位置、類型以及變化的幅度。
例:第一類型間斷點(diǎn)的檢測
- 本例中,信號(hào)的不連續(xù)是由于低頻特征的正弦信號(hào)在后半部分突然有高頻特征的正弦信號(hào)加入,
- 首先利用傅里葉變換分析對(duì)信號(hào)在頻域進(jìn)行分析,發(fā)現(xiàn)無檢測突變點(diǎn),
- 接著利用小波分析進(jìn)行分析,結(jié)果證明它能夠準(zhǔn)確地檢測出了信號(hào)幅值突變的位置,即高頻信號(hào)加入的時(shí)間點(diǎn)。
load freqbrk;
x=freqbrk;%對(duì)信號(hào)進(jìn)行傅里葉變換
f=fft(x,1024);
f=abs(f);
figure;
subplot(211);
plot(x);
subplot(212);
plot(f);
%使用db6小波進(jìn)行6層
[c,l]=wavedec(x,6,’db6’);
figure(2);
subplot(811);
plot(x);
ylabel('x');
%對(duì)分解的第六層低頻系數(shù)進(jìn)行重構(gòu)
a=wrcoef('a',c,l,'db6',6);
subplot(812);
plot(a);
ylabel('a6');
for i=1:6 %對(duì)分解的第6層到第1層的高頻系數(shù)分別進(jìn)行
d=wrcoef('d',c,l,'db6',7-i);
subplot(8,1,i+2);
plot(d);
ylabel(['d',num2str(7-i)]);
end
經(jīng)驗(yàn)第一類突變用db6小波分解?
第二類db4小波分解
load nearbrk;
x=nearbrk;
%使用db4對(duì)信號(hào)進(jìn)行2層分解
[c,l]=wavedec(x,2,‘db4’);
subplot(411);
plot(x);
ylabel('x');
%對(duì)分解的第六層低頻系數(shù)進(jìn)行重構(gòu)
a=wrcoef('a',c,l,'db4',2);
subplot(412);
plot(a);
ylabel('a2');
for i=1:2%對(duì)分解的第2層到第1層的高頻系數(shù)進(jìn)行重構(gòu)
a=wrcoef('a',c,l,'db4',3-i);
subplot(4,1,i+2);
plot(d);
ylabel(['d',num2str(3-i)]);
end
去除首尾無效數(shù)據(jù)https://blog.csdn.net/FDA_sq/article/details/124250130
舉例:銑削進(jìn)刀過程
- 信號(hào)數(shù)據(jù)的首部有銑削進(jìn)刀過程導(dǎo)致的信號(hào)逐漸變大的數(shù)據(jù),
- 相應(yīng)的圖中數(shù)據(jù)尾部有一段結(jié)束銑削退刀造成的逐漸變小的數(shù)據(jù),
- 這兩段數(shù)據(jù)為非正常銑削信號(hào)數(shù)據(jù),因此是需要人工剔除的無效數(shù)據(jù)。
原理:
- 求取每次走刀過程首尾部無效數(shù)據(jù)的臨界值:每次走刀原始數(shù)據(jù)的上四分位值Q。
- 原始數(shù)據(jù)的首部從前往后尋找第一個(gè)大于等于Q的數(shù)據(jù)作為進(jìn)刀結(jié)束位置,剔除前面所有小于Q的信號(hào)數(shù)據(jù);
- 同理,尾部從后往前尋找第一個(gè)大于等于Q的數(shù)據(jù)作為退刀開始位置,剔除后面所有小于Q的數(shù)據(jù)。
%使用函數(shù):
Q=quantile(x,y,z)
% x表示要求的矩陣或者向量;y的取值為表示要求的分位數(shù),
% 如四分之一中位數(shù)0.25,四分之三中位數(shù)0.75等;
% z的取值為1或者2,若值為1則表示按列求四分位數(shù),若為2表示按行求四分位數(shù)。
% Q為計(jì)算的上四分位值,常用大小為 (1,n).
%注:對(duì)于向量,
Q2=quantile(raw_data,0.75,1)
%等同于Q3 = prctile(raw_data,75)
重復(fù)值剔除https://blog.csdn.net/qq_43657442/article/details/118891434
使用?unique?函數(shù),
直接刪除重復(fù)行
unique(A,'rows',setOrder)
%其中,setOrder 參數(shù)有兩種取值,默認(rèn)是’sorted’ 即去掉重復(fù)后排序輸出(以第一個(gè)元素大小位依據(jù)),
%另一個(gè)是'stable' 代表去掉重復(fù)后按原來順序輸出
?示例
>> a=[1 0 1;1 0 1; 1 1 1;2 5 1; 1 1 1;0 1 2 ;0 4 5 ;0 1 2]
a =
1 0 1
1 0 1
1 1 1
2 5 1
1 1 1
0 1 2
0 4 5
0 1 2
>> unique(a,'row','stable')
ans =
1 0 1
1 1 1
2 5 1
0 1 2
0 4 5
>> unique(a,'row')
ans =
0 1 2
0 4 5
1 0 1
1 1 1
2 5 1
>>
按列刪除重復(fù)行
[C,ia,ic] = unique(dataRed(:,1:2),'rows'):
% 基于1、2列的數(shù)據(jù)查找dataRed中所有的唯一行。
% 指定三個(gè)輸出以返回索引向量 ia 和 ic。
uA = dataRed(ia,:)
%使用 ia 對(duì) dataRed 進(jìn)行索引并檢索包含前兩列中元素的唯一組合的行。
dataRed(:,1:2)
?選擇了?dataRed
?中所有行的前兩列。這通常是為了查找數(shù)據(jù)中某些列的唯一組合而不考慮其他列。'rows'
?參數(shù)告訴 MATLAB 在比較每個(gè)行時(shí)要考慮其順序,因此只有包含相同值且相同順序的行才會(huì)被視為相等。- 執(zhí)行?
unique
?函數(shù),將前兩列看作一個(gè)矩陣,并返回所有唯一行的排序結(jié)果。結(jié)果分別存儲(chǔ)在三個(gè)變量?C
、ia
?和?ic
?中。
具體來說,輸出參數(shù)包含以下內(nèi)容:
C
:一個(gè)矩陣,其中包含了輸入矩陣的所有唯一行,按首次出現(xiàn)順序排列。ia
:一個(gè)向量,其中包含了在輸入矩陣中所選列的所有唯一行的索引。對(duì)于輸入矩陣中的每個(gè)行,ia
?中的相應(yīng)元素是?C
?中相應(yīng)行的索引。ic
:一個(gè)向量,與輸入矩陣大小相同,其中包含了輸入矩陣中每個(gè)行的索引,以指示它在?C
?中的位置。
假設(shè)有一個(gè)矩陣 dataRed
包含以下內(nèi)容:
dataRed = [1, 2, 3;
4, 5, 6;
7, 8, 9;
1, 2, 3;
4, 5, 6];
?調(diào)用 unique
函數(shù):
[C,ia,ic] = unique(dataRed(:,1:2),'rows');
?然后,MATLAB 將返回以下結(jié)果:
C =
1 2
4 5
7 8
ia =
1
2
3
ic =
1
2
3
1
2
這意味著,dataRed
矩陣中前兩列的唯一組合是 (1, 2)
、(4, 5)
和 (7, 8)
。
ia
向量包含了這些行在 C
矩陣中所處的位置,
而 ic
向量指示了矩陣 dataRed
中的每個(gè)行在 C
矩陣中的位置。?
matlab 找到非空的位置 去除重復(fù)數(shù)據(jù)/去除NaNhttps://blog.csdn.net/qq_20784777/article/details/126480643?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-126480643-blog-118891434.235%5Ev35%5Epc_relevant_increate_t0_download_v2&spm=1001.2101.3001.4242.1&utm_relevant_index=3
找到非空的位置
matlab中find()函數(shù)用法?https://blog.csdn.net/qq_45767476/article/details/109081132
find()函數(shù)
?idx = find(isnan(data));
- 用于查找一個(gè)向量或矩陣中所有包含 NaN(Not-a-Number)元素的下標(biāo)索引。
- 具體地說,該語句執(zhí)行以下步驟:
- isnan(data)返回一個(gè)與data相同大小的邏輯數(shù)組,其中包含了data中每個(gè)元素是否為NaN的信息。
- 如果是NaN,則該位置為1;否則為0。
- find()函數(shù)獲取輸入?yún)?shù)中非零元素的下標(biāo),因此對(duì)于isnan(data)返回的邏輯數(shù)組,
- find()將會(huì)返回一個(gè)包含了所有為1的元素所在位置的下標(biāo)向量。
- 因此,最終得到的結(jié)果是一個(gè)列向量idx,其中包含了所有data中NaN值的下標(biāo)索引。
idx = find(~isnan(data));
- 用于查找一個(gè)向量或矩陣中所有不包含 NaN(Not-a-Number)元素的下標(biāo)索引。
- 具體地說,該語句執(zhí)行以下步驟:
- isnan(data)返回一個(gè)與data相同大小的邏輯數(shù)組,其中包含了data中每個(gè)元素是否為NaN的信息。
- 如果是NaN,則該位置為1;否則為0。
- 在此語句中,~運(yùn)算符對(duì)邏輯數(shù)組進(jìn)行求反操作,即將1變?yōu)?,0變?yōu)?。
- 因此,得到的邏輯數(shù)組表示data中所有不是NaN的元素的位置。
- find()函數(shù)獲取輸入?yún)?shù)中非零元素的下標(biāo),因此對(duì)于~isnan(data)返回的邏輯數(shù)組,
- find()將會(huì)返回一個(gè)包含了所有為1的元素所在位置的下標(biāo)向量。
- 因此,最終得到的結(jié)果是一個(gè)列向量idx,其中包含了所有data中非NaN值的下標(biāo)索引。
例如,假設(shè)有一個(gè)5x5的矩陣A
,其中包含5個(gè)NaN值。
可以通過以下方式找到這些NaN值所在的位置:
A = [1 2 NaN 4 5;
6 NaN 8 9 10;
11 12 13 NaN 15;
16 17 18 19 NaN;
NaN 21 22 23 24];
idx = find(isnan(A))
結(jié)果
idx =
3
7
12
20
25
這意味著,A
矩陣的第3、7、12、20和25個(gè)元素是NaN。?
可以通過以下方式找到這些非NaN值所在的位置:?
A = [1 2 NaN 4 5;
6 NaN 8 9 10;
11 12 13 NaN 15;
16 17 18 19 NaN;
NaN 21 22 23 24];
idx = find(~isnan(A))
?結(jié)果
idx =
1
2
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
21
22
23
24
isnan()函數(shù)用法https://blog.csdn.net/Intangilble/article/details/83786589
isnan(A):
%判斷數(shù)組的元素是否是NaN。(True for Not-a-Number.)
%用法說明:
B = isnan(A)
%返回一個(gè)與A相同維數(shù)的數(shù)組;
%若A的元素為NaN(非數(shù)值),在對(duì)應(yīng)位置上返回邏輯1(真),否則返回邏輯0(假)。
例子
(InF 代表正無窮量;-InF 代表負(fù)無窮量;NaN代表非數(shù)值量;)
>>isnan([pi NaN Inf -Inf])
ans =
1×4 logical 數(shù)組
0 1 0 0
[data in] = unique(data(:, n)):
b = unique(A)
b = unique(A,'rows')
[b,m,n] = unique(...)
?
%描述
%1、b = unique(A) 返回的是和A中一樣的值,但是沒有重復(fù)元素。產(chǎn)生的結(jié)果向量按升序排序。
%A可以是一個(gè)字符串的單元陣列。
%2、b = unique(A,'rows') 返回的是A中的唯一的行數(shù)。
%3、[b,m,n] = unique(...) 也返回索引向量m和n,使得B = A(M) 和 A= B(N).
%m的每一個(gè)元素是最大的下標(biāo),使得B = A(M). 對(duì)于行的組合,B = A(M,:) 和 A= B(N,:)
剔除異常值及平滑處理https://www.bilibili.com/read/cv9279417文章來源:http://www.zghlxwxcb.cn/news/detail-732485.html
使用深度學(xué)習(xí)進(jìn)行“序列到序列”回歸https://ww2.mathworks.cn/help/deeplearning/ug/sequence-to-sequence-regression-using-deep-learning.html文章來源地址http://www.zghlxwxcb.cn/news/detail-732485.html
到了這里,關(guān)于數(shù)據(jù)預(yù)處理matlab的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!