我正在尝试从超过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');
答案 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