嵌套循环用于MATLAB中的列数据处理
问题描述:
我有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未被处理。
答
我认为问题在于您覆盖了结果。您可以使用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
注意,我删除了一些临时变量,避免嵌套循环和预分配的外循环的变量。这可能会缩短执行时间。
_I需要读取第一列并进行一些处理,并且这会导致第一列数据的唯一四个行变量(每个1,4097)只有这一行中**四行变量**的含义是什么? –
亲爱的穆罕默德,第一列的处理结果有四个单独的变量,每个变量都有一行和4097列。抱歉混淆。正如m7913d所建议的那样,我接近最终答案,这是一个覆盖问题。这解决了。但是现在我需要努力使代码更快。感谢您的帮助。 – Dattaprasad
如果它解决了您的问题或者自己写一个答案,请将其标记为正确答案,这对其他人可能有用。 – m7913d