2017-02-26 23 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  

注意,我删除了一些临时变量,避免嵌套循环和预分配的外循环的变量。这可能会缩短执行时间。