2011-03-01 11 views
5

Título Hope no es confuso. Es simple de mostrar con el ejemplo. Tengo un vector de fila así: [1 5 6]. Quiero encontrar la diferencia promedio entre cada elemento. Las diferencias en este ejemplo son 4 y 1, por lo que el promedio es 2.5. Este es un pequeño ejemplo. Mis vectores de fila pueden ser muy grandes. Soy nuevo en MatLab, así que ¿hay alguna forma eficiente de utilizar MATLAB eficiente matriz/matriz de manipulación para hacerlo bien?Manera eficiente de encontrar la diferencia promedio entre los elementos en la matriz

Ya hay una pregunta similar en SOF, pero esta pregunta es específicamente para MATLAB.

Gracias :)

Edit: Como consultada por @gnovice, quería que la diferencia absoluta.

+0

Sabía que este sería una pregunta popular :) !. Gracias chicos. – ale

+2

Una pequeña pregunta: ¿te importa el * signo * de las diferencias? En otras palabras, ¿quieres tomar el * valor absoluto * de las diferencias? Con un vector como '[1 5 1]', la media de las diferencias es 0, pero la media del valor absoluto de las diferencias es 4. – gnovice

+1

Hey gnovice. Lo que realmente hice fue 'mean (abs (diff (myVector)));' (variación de la solución por @Azim) porque sí, quería la diferencia absoluta. Debería haberlo dicho a todos, así que gracias por mencionarlo. Editaré mi pregunta :) – ale

Respuesta

8

solución simple usando diff y significa

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

Ejemplo

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

Esto funciona pero la respuesta @Jonas' es la correcta SOLUTIO norte.


Edición

De @gnovice, @ vivos-colores y comentarios @sevenless.

La media del valor absoluto de la diferencia se puede encontrar mediante la inserción de abs en (1)

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

Puede agregar la función de valor absoluto para arreglarlo. Es decir, aveDiff = mean (abs (diff (myVector))). – Sevenless

4

Si tiene una matriz array, entonces la diferencia promedio es de

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

porque diff(array), donde array = [a b c d], es [b-a c-b d-c]. El promedio de eso es (b-a+c-b+d-c)/3, que se simplifica a (d-a)/3.

En su ejemplo

array = [1 5 6]; 

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

ans = 
2.5 
+2

Es una buena solución eficiente, pero no funcionará si quiere la media de los * valores absolutos * de las diferencias (un requisito adicional ahora editado en la pregunta). – gnovice

0

Si X es su vector, se puede hacer

mean(X(2:end) - X(1:end-1)) 
Cuestiones relacionadas