2011-03-01 39 views
5

希望标题不会让人困惑。以示例显示很简单。我有这样的行向量:[1 5 6]。我想找出每个元素之间的平均差异。这个例子中的差异是4和1,所以平均值是2.5。这是一个小例子。我的行向量可能非常大。我是MatLab的新手,那么有没有一些使用MATLAB的高效矩阵/数组操作来做到这一点的有效方法?寻找数组元素之间平均差异的有效方法

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

谢谢:)

编辑:由于查询由@gnovice,我想的绝对差。

+0

我知道本作中找到将是一个受欢迎的问题:)!多谢你们。 – ale

+2

一个小问题:你关心差异的*符号吗?换句话说,你想获得差异的绝对值*吗?使用类似'[1 5 1]'的向量,差值的平均值为0,但差值的绝对值的平均值为4. – gnovice

+1

Hey gnovice。我实际上做的是'平均(abs(diff(myVector)));'(@Azim解决方案的变体),因为是的,我想要绝对的差异。我应该告诉大家这个,谢谢你的提出。我将编辑我的问题:)。 – ale

回答

8

使用DIFF简单的解决方案意味着

aveDiff = mean(diff(myVector))  %#(1) 

>> v=[1 5 6] 
v = 
    1  5  6 
>> mean(diff(v)) 
ans = 
    2.5000 

这工作,但@Jonas'的答案是正确的搜索解决方案ñ。


编辑

从@gnovice,@生动,色彩和@sevenless意见。

差的绝对值的平均值可以通过插入ABS成(1)

aveDiff = mean(abs(diff(myVector)))  %#(2) 
+0

您可以添加绝对值函数来修复它。也就是说,aveDiff = mean(abs(diff(myVector)))。 – Sevenless

4

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

(array(end) - array(1))/(length(array)-1) 

因为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 
+2

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

0

如果X是你的载体,你可以做

mean(X(2:end) - X(1:end-1)) 
相关问题