嵌套for循环用于MATLAB中的列数据处理

时间:2017-02-26 09:13:14

标签: excel matlab for-loop nested

我有100列xlsx文件,大小(4097,100)。我需要读取第一列并进行一些处理,这将导致仅第一列数据的四个行变量(每个1,4097)。此外,我需要处理这四个行变量中的每一个,以获得其统计参数,如MATLAB中的min,max,mean,SD,var。如何使用嵌套for循环? 我感谢您的帮助。我正在尝试的示例MATLAB代码是我只考虑了两列A1和A2:

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未被处理。

1 个答案:

答案 0 :(得分: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    

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