Эффективный способ найти среднюю разницу между элементами в массиве - PullRequest
5 голосов
/ 01 марта 2011

Надеюсь, название не сбивает с толку.Это просто показать на примере.У меня есть вектор строки, например, так: [1 5 6].Я хочу найти среднюю разницу между каждым элементом.Различия в этом примере 4 и 1, поэтому среднее значение составляет 2,5.Это маленький пример.Мои векторы строк могут быть очень большими.Я новичок в MatLab, так что есть ли какой-нибудь эффективный способ использовать эффективную работу MATLAB с матрицами / массивами, чтобы сделать это красиво?

Уже есть похожий вопрос по SOF, но этот вопрос специально для MATLAB!

Спасибо :)

РЕДАКТИРОВАТЬ: На вопрос @gnovice, я хотел абсолютную разницу.

Ответы [ 3 ]

8 голосов
/ 01 марта 2011

Простое решение с использованием diff и mean

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

Пример

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

Это работает, но ответ @Jonas - правильное решение.


Редактировать

Из @gnovice, @ vivid-colors и @sevenless комментариев.

Среднее абсолютное значение разности можно найти, вставив abs в (1)

aveDiff = mean(abs(diff(myVector)))     %#(2)
4 голосов
/ 01 марта 2011

Если у вас есть массив 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
0 голосов
/ 01 марта 2011

Если X ваш вектор, вы можете сделать

mean( X(2:end) - X(1:end-1) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...