2015-07-10 85 views
0

我想从excel中获取超过17500行的列。现在的问题是,当我在MATLAB中调用它时,它并没有给我所有数据的整个矩阵。它从中间某处获取数据。在matlab中从Excel中获取数据

现在真正的问题是,我必须在列中添加4个数字,并获得平均值,将它保存在另一列,然后继续下一组连续的数字,然后重复,直到结束..我该怎么做在MATLAB中。请帮我解决这个问题,因为我只是一个菜鸟。谢谢。

到目前为止,我已经做了是这样的:

clc 
g=xlsread('Data.xlsx',1,'E1:E17500'); 
x=1; 
for i = 1:(17500/4) %as steps has to be stepped at 4 since we need avg of 4  
     y{i}=((g{x}+g{x+1}+g{x+2}+g{x+3})/4); 
     x=x+4; 
end 
xlswrite('Data.xlsx', y, 1, 'F1:F4375'); 
+0

的'for'循环是不正确。而不是以4的间隔从1到17497迭代“i”,而是以1为间隔从1到4275进行迭代。将其更改为“1:4:17500”。 – bcdan

回答

0

我在这里看到几件事情:xlsread与一个输出,让用户双打的数字矩阵(非单元阵列)。因此,您应该使用()而不是{}。当我们使用reshape创建尺寸为4x4375的矩阵时,for循环可以省略。我们直接用mean(在第一维上评估)计算每列中4个值的平均值。要再次获得列向量,我们必须使用'转置mean的结果。

下面是代码:

g = xlsread('Data.xlsx',1,'E1:E17500'); 
y = mean(reshape(g,4,[]),1)'; 
xlswrite('Data.xlsx',y,1,'F1:F4375'); 

要查看详细的代码中会发生什么,让我们来看看使用随机数据的每个步骤的结果为g

代码:

rng(4); 
g = randi(10,12,1) 
a = reshape(g,4,[]) 
b = mean(a,1) 
y = b' 

结果:

g = 
    10 
    6 
    10 
    8 
    7 
    3 
    10 
    1 
    3 
    5 
    8 
    2 
a = 
    10  7  3 
    6  3  5 
    10 10  8 
    8  1  2 
b = 
    8.5000 5.2500 4.5000 
y = 
    8.5000 
    5.2500 
    4.5000 
+0

非常感谢您的帮助 – MANI