找到数组中元素之间平均差异的有效方法

ale*_*ale 5 matlab

希望标题不会混淆.通过示例展示很简单.我有一个像这样的行向量:[1 5 6].我想找到每个元素之间的平均差异.此示例中的差异为4和1,因此平均值为2.5.这是一个小例子.我的行向量可能非常大.我是MatLab的新手,那么使用MATLAB高效的矩阵/数组操作有一些有效的方法来做到这一点吗?

SOF上也有类似的问题,但这个问题专门针对MATLAB!

谢谢 :)

编辑:正如@gnovice所询问,我想要绝对的差异.

Azi*_*zim 8

使用diffmean的简单解决方案

aveDiff = mean(diff(myVector))     %#(1)
Run Code Online (Sandbox Code Playgroud)

>> v=[1 5 6]
v =
     1     5     6
>> mean(diff(v))
ans =
    2.5000
Run Code Online (Sandbox Code Playgroud)

这有效,但@Jonas的答案是正确的解决方案.


编辑

来自@gnovice,@ vivid-colors和@sevenless评论.

通过将abs插入(1)可以找到差值绝对值的平均值

aveDiff = mean(abs(diff(myVector)))     %#(2)
Run Code Online (Sandbox Code Playgroud)


Jon*_*nas 5

如果你有一个数组array,那么平均差是

(array(end) - array(1))/(length(array)-1)
Run Code Online (Sandbox Code Playgroud)

因为diff(array),哪里array = [a b c d],是[b-a c-b d-c]。其平均值为(b-a+c-b+d-c)/3,简化为(d-a)/3

在你的例子中

array = [1 5 6];

(array(end)-array(1))/2 

ans =
2.5
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的有效解决方案,但如果您想要差异的*绝对值*的平均值(现在已编辑到问题中的附加要求),则它将不起作用。 (2认同)