2010-03-05 75 views

Trả lời

11

Sử dụng hàm QUANTILE.

Y = quantile(X,P); 

trong đó X là ma trận và P là vô hướng hoặc vectơ xác suất. Ví dụ, nếu P = 0,01, Y sẽ là vectơ của các giá trị cho mỗi cột, sao cho 99% giá trị cột lớn hơn.

2

Nếu bạn không có thống kê Toolbox, luôn có

y=sort(x); 
y(floor(length(y)*0.99)) 

hoặc

y(floor(length(y)*0.01)) 

tùy thuộc vào những gì bạn muốn nói.

+0

Thật không may, điều này thường sẽ không mang lại kết quả tương tự như QUANTILE. – gnovice

+0

@gnovice: oh vâng, QUANTILE nội suy và nói chung chính xác hơn. Công việc tốt bắt chước nó trong câu trả lời của bạn :-) – AVB

10

Giải pháp đơn giản nhất là sử dụng hàm QUANTILE làm yuk suggested.

Y = quantile(X,0.01); 

Tuy nhiên, bạn sẽ cần Statistics Toolbox để sử dụng chức năng QUANTILE. Một giải pháp không phụ thuộc vào hộp công cụ có thể được tìm thấy bằng cách lưu ý rằng QUANTILE gọi hàm PRCTILE, chính nó gọi hàm dựng sẵn INTERP1Q để thực hiện tính toán chính. Đối với trường hợp chung của một ma trận 2-D mà không chứa NaN giá trị mà bạn có thể tính toán quantiles của mỗi cột bằng cách sử dụng đoạn mã sau:

P = 0.01;  %# Your probability 
S = sort(X); %# Sort the columns of your data X 
N = size(X,1); %# The number of rows of X 
Y = interp1q([0 (0.5:(N-0.5))./N 1]',S([1 1:N N],:),P); %'# Get the quantiles 

này sẽ cho bạn kết quả tương tự như gọi QUANTILE, mà không cần bất kỳ toolboxes .

Các vấn đề liên quan