2011-03-01 42 views
5

Tiêu đề hy vọng không gây nhầm lẫn. Nó đơn giản để hiển thị bằng ví dụ. Tôi có một vector hàng như vậy: [1 5 6]. Tôi muốn tìm sự khác biệt trung bình giữa mỗi phần tử. Sự khác biệt trong ví dụ này là 4 và 1 sao cho trung bình là 2,5. Đây là một ví dụ nhỏ. Vectơ hàng của tôi có thể rất lớn. Tôi mới đến MatLab như vậy là có một số cách hiệu quả của việc sử dụng ma trận hiệu quả ma trận/mảng MATLAB để làm điều này độc đáo?Cách hiệu quả để tìm sự khác biệt trung bình giữa các phần tử trong mảng

Có một câu hỏi tương tự về SOF nhưng câu hỏi này dành riêng cho MATLAB!

Cảm ơn :)

EDIT: Được truy vấn bởi @gnovice, tôi muốn có sự khác biệt tuyệt đối.

+0

Tôi biết điều này sẽ là một câu hỏi phổ biến :) !. Cảm ơn các bạn. – ale

+2

Một câu hỏi nhỏ: Bạn có quan tâm đến dấu * của sự khác biệt không? Nói cách khác, bạn có muốn lấy * giá trị tuyệt đối * của sự khác biệt không? Với một vectơ như '[1 5 1]', giá trị trung bình của sự khác biệt là 0, nhưng giá trị trung bình của giá trị tuyệt đối của sự khác biệt là 4. – gnovice

+1

Hey gnovice. Những gì tôi thực sự đã làm là 'có nghĩa là (abs (diff (myVector));' (biến thể của giải pháp bởi @Azim) bởi vì có, tôi muốn sự khác biệt tuyệt đối. Tôi nên nói với tất cả mọi người vì vậy cảm ơn vì đã mang nó lên. Tôi sẽ chỉnh sửa câu hỏi của tôi :). – ale

Trả lời

8

giải pháp đơn giản sử dụng diffnghĩa

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

Ví dụ

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

này hoạt động nhưng @Jonas' Câu trả lời là solutio đúng n.


Sửa

Từ @gnovice, @ sinh động-màu sắc và ý kiến ​​@sevenless.

Giá trị trung bình của giá trị tuyệt đối của sự khác biệt có thể được tìm thấy bằng cách chèn abs vào (1)

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

Bạn có thể thêm hàm giá trị tuyệt đối để sửa lỗi. Tức là, aveDiff = mean (abs (diff (myVector))). – Sevenless

4

Nếu bạn có một mảng array, thì khoản chênh lệch trung bình là

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

diff(array), nơi array = [a b c d], là [b-a c-b d-c]. Trung bình là (b-a+c-b+d-c)/3, đơn giản hóa thành (d-a)/3.

Trong ví dụ của bạn

array = [1 5 6]; 

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

ans = 
2.5 
+2

Đó là một giải pháp hiệu quả, nhưng sẽ không hoạt động nếu bạn muốn giá trị trung bình của * các giá trị tuyệt đối (yêu cầu bổ sung giờ đây được chỉnh sửa thành câu hỏi). – gnovice

0

Nếu X là vector của bạn, bạn có thể làm

mean(X(2:end) - X(1:end-1)) 
Các vấn đề liên quan