2017-02-26 62 views
1

我有100列xlsx文件,大小爲(4097,100)。我需要讀取第一列並進行一些處理,並且這僅對第一列數據產生四個行變量(每個1,4097)。此外,我需要處理這四個行變量中的每一個,以獲得其統計參數,例如MATLAB中的min,max,mean,SD,var。如何使用嵌套for循環做到這一點? 我感謝您的幫助。我試圖樣本MATLAB代碼是我只考慮兩列A1和A2:嵌套循環用於MATLAB中的列數據處理

A = xlsread('S.xlsx'); 
num_rows = size(A,1); 
num_cols = size(A,2); 
A1 = A (:,1); 
A2 = A (:,2); 
B = {A1,A2}; 
for i = 1:2 
for j = 1:4 
IMF = emd(B{i},'STOP',[0.1,0.5,0.05],'MAXITERATIONS',100); 
I1 = IMF (1,:); 
I2 = IMF (2,:); 
I3 = IMF (3,:); 
I4 = IMF (4,:); 
imf = {I1, I2, I3, I4}; 
m1(j) = mean(imf{j}); 
m2(j) = min(imf{j}); 
m3(j) = max(imf{j}); 
m4(j) = std(imf{j}); 
m5(j) = var(imf{j}); 
end 
end 

代碼我試過的另一個變化是:

A = xlsread('S.xlsx'); 
num_rows = size(A,1); 
num_cols = size(A,2); 
A1 = A (:,1); 
A2 = A (:,2); 
B = {A1,A2}; 
for i = 1:2 
IMF = emd(B{i},'STOP',[0.1,0.5,0.05],'MAXITERATIONS',100); 
I1 = IMF (1,:); 
I2 = IMF (2,:); 
I3 = IMF (3,:); 
I4 = IMF (4,:); 
imf = {I1, I2, I3, I4}; 
for j = 1:4 
m1(j) = mean(imf{j}); 
m2(j) = min(imf{j}); 
m3(j) = max(imf{j}); 
m4(j) = std(imf{j}); 
m5(j) = var(imf{j}); 
end 
end 

但沒有成功。我只獲得第一列的統計值,即I1,I2,I3和I4的四個值。第二列A2未被處理。

+0

_I需要讀取第一列並進行一些處理,並且這會導致第一列數據的唯一四個行變量(每個1,4097)只有這一行中**四行變量**的含義是什麼? –

+0

親愛的穆罕默德,第一列的處理結果有四個單獨的變量,每個變量都有一行和4097列。抱歉混淆。正如m7913d所建議的那樣,我接近最終答案,這是一個覆蓋問題。這解決了。但是現在我需要努力使代碼更快。感謝您的幫助。 – Dattaprasad

+0

如果它解決了您的問題或者自己寫一個答案,請將其標記爲正確答案,這對其他人可能有用。 – m7913d

回答

1

我認爲問題在於您覆蓋了結果。您可以使用Matlab debugger來逐步運行您的代碼,以檢查究竟發生了什麼。

A = xlsread('S.xlsx'); 
m1 = zeros(2, 4); 
m2 = zeros(2, 4); 
m3 = zeros(2, 4); 
m4 = zeros(2, 4); 
m5 = zeros(2, 4); 
for i = 1:2 
    IMF = emd(A(:, 1),'STOP',[0.1,0.5,0.05],'MAXITERATIONS',100); 
    m1(i, :) = mean(IMF, 2); 
    m2(i, :) = min(IMF, [], 2); 
    m3(i, :) = max(IMF, [], 2); 
    m4(i, :) = std(IMF, 0, 2); 
    m5(i, :) = var(IMF, 0, 2); 
end  

注意,我刪除了一些臨時變量,避免嵌套循環和預分配的外循環的變量。這可能會縮短執行時間。