希望标题不会让人困惑。以示例显示很简单。我有这样的行向量:[1 5 6]
。我想找出每个元素之间的平均差异。这个例子中的差异是4和1,所以平均值是2.5。这是一个小例子。我的行向量可能非常大。我是MatLab的新手,那么有没有一些使用MATLAB的高效矩阵/数组操作来做到这一点的有效方法?寻找数组元素之间平均差异的有效方法
在SOF上也有类似的问题,但这个问题是专门针对MATLAB的!
谢谢:)
编辑:由于查询由@gnovice,我想的绝对差。
希望标题不会让人困惑。以示例显示很简单。我有这样的行向量:[1 5 6]
。我想找出每个元素之间的平均差异。这个例子中的差异是4和1,所以平均值是2.5。这是一个小例子。我的行向量可能非常大。我是MatLab的新手,那么有没有一些使用MATLAB的高效矩阵/数组操作来做到这一点的有效方法?寻找数组元素之间平均差异的有效方法
在SOF上也有类似的问题,但这个问题是专门针对MATLAB的!
谢谢:)
编辑:由于查询由@gnovice,我想的绝对差。
使用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)
您可以添加绝对值函数来修复它。也就是说,aveDiff = mean(abs(diff(myVector)))。 – Sevenless
如果你有一个数组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
这是一个很好的高效解决方案,但是如果您想要差异的*绝对值*的平均值(现在编辑到问题中的附加要求)将不起作用。 – gnovice
如果X是你的载体,你可以做
mean(X(2:end) - X(1:end-1))
我知道本作中找到将是一个受欢迎的问题:)!多谢你们。 – ale
一个小问题:你关心差异的*符号吗?换句话说,你想获得差异的绝对值*吗?使用类似'[1 5 1]'的向量,差值的平均值为0,但差值的绝对值的平均值为4. – gnovice
Hey gnovice。我实际上做的是'平均(abs(diff(myVector)));'(@Azim解决方案的变体),因为是的,我想要绝对的差异。我应该告诉大家这个,谢谢你的提出。我将编辑我的问题:)。 – ale