一组数据中的最大数量

时间:2016-03-09 22:51:09

标签: matlab max

我想使用下面的数据得到三个连续数字的最大值,从这个例子中的前三个数字开始50.0,50.0和42.8然后将它存储在另一个Nx1矩阵中,然后选择接下来的三个数字,50.0 ,42.8和48.2,得到最大值并将其存储在Nx1矩阵的第二行,然后选择接下来的三个数字42.8,48.2和46.4得到最大值并将其存储在Nx1矩阵的第三行中,依此类推最后的数据(57.2)。我会感谢这方面的任何帮助。

50.0
50.0
42.8
48.2
46.4
46.4
55.4
71.6
71.6
69.8
51.8
57.2

4 个答案:

答案 0 :(得分:1)

编辑:

clc
array = [50.0 50.0 42.8 48.2 46.4 46.4 55.4 71.6 71.6 69.8 51.8 57.2];
res = [];
len = length(array);
for i = 1 : len-2
    m = max([array(i) array(i+1) array(i+2)]);
    res = [res m];
end
m = max([array(len) array(len-1)]);
res = [res m m]

结果应该在res变量

答案 1 :(得分:1)

将具有NaN(不是数字)的行作为占位符进行堆叠,然后在列之间取最大值:

a = [50.0 50.0 42.8 48.2 46.4 46.4 55.4 71.6 71.6 69.8 51.8 57.2];
A = a
A(end+1,:) = [a(2:end),NaN]
A(end+1,:) = [a(3:end),NaN,NaN]
max(A)

答案 2 :(得分:1)

编辑:与在R2016a中一样,有一个名为movmax的函数可以完成您想要实现的功能:

a = [50.0 50.0 42.8 48.2 46.4 46.4 55.4 71.6 71.6 69.8 51.8 57.2];
movmax(a,[0 2]) % 

参数是:0数字位于进行计算的关键元素的左侧,而2位于右侧(+关键元素,意味着3元素向量打开,最大值为计算)

  

ans = 50.0000 50.0000 48.2000 48.2000 55.4000 71.6000 71.6000 71.6000 71.6000 69.8000 57.2000 57.2000

这可能是arrayfun

的工作
res = arrayfun(@(x) max(a(x:min(x+2,length(a)))), 1:length(a))

,其中

a = [50.0 50.0 42.8 48.2 46.4 46.4 55.4 71.6 71.6 69.8 51.8 57.2];
这里使用

arrayfun在单个matlab命令中执行一些循环。获得预期结果的技巧是在输入向量的长度和内部索引之间取最小值,以使索引不超过向量的长度。

结果:

  

res =      50.0000 50.0000 48.2000 48.2000 55.4000 71.6000 71.6000 71.6000 71.6000 69.8000 57.2000 57.2000

答案 3 :(得分:1)

如果您有图像处理工具箱,则使用im2col生成数据的重叠块作为矩阵的列,然后沿第一维应用max

x = [50.0 50.0 42.8 48.2 46.4 46.4 55.4 71.6 71.6 69.8 51.8 57.2].'; %'// data
N = 3; %// block size
xi = im2col([x(:); NaN(N-1,1)], [N 1]); %// append N-1 NaNs to generate the last blocks
result = max(xi, [], 1).';

在示例中,这给出了

result =
   50.0000
   50.0000
   48.2000
   48.2000
   55.4000
   71.6000
   71.6000
   71.6000
   71.6000
   69.8000
   57.2000
   57.2000