在matlab中从Excel中获取数据
问题描述:
我想从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');
答
我在这里看到几件事情: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
的'for'循环是不正确。而不是以4的间隔从1到17497迭代“i”,而是以1为间隔从1到4275进行迭代。将其更改为“1:4:17500”。 – bcdan