在matlab中从excel中获取数据

时间:2015-07-10 18:07:28

标签: excel matlab

我正在尝试从超过17500的行中获取excel中的列。现在的问题是,当我在MATLAB中调用它时,它不会给我所有数据的整个矩阵。它从中间的某个地方获取数据。

现在真正的问题是我必须在列中添加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');

1 个答案:

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