2

データのベクトルが与えられたときに正確な確率質量関数(または確率密度関数)を構築するMatlab関数はありますか?

私はこのようなものを意味します:

X = [1 2 4 1 4 3 2 3 4 1];
[x px] = a_function(X)
x = 
   1 2 3 4
px = 
   0.3 0.2 0.2 0.3
4

2 に答える 2

5

あなたが使用することができますaccumarray

pmf = accumarray(X(:),1)./numel(X);
pmf = pmf./sum(pmf);

またはhist

pmf = hist(X, max(X))' ./ numel(X);      

またはtabulate

t= tabulate(X);
pmf  = t(:, 3) ./ 100 ;

そして、おそらく少なくとも10以上の方法があります...

pxただ使用するため、またはpx=unique(X)ソリューションなどで...t(:, 1)tabulate

于 2013-02-05T08:46:26.187 に答える
2

これが私が使用する関数です(StackOverflowがMatlabを正しく解析しないためコメント%が置き換えられました)。#

これは、natanの回答のaccumarrayいずれかを使用するか、またはそのように使用することで、改善(およびおそらく高速化)することができます。hist

function [vals freqs] = pmf(X)
#PMF Return the probability mass function for a vector/matrix.
#
#INPUTS:
#   X       Input matrix
#
#OUTPUTS:
#   VALS    Vector of unique values
#   FREQS   Vector of frequencies of occurence of each value.
#

    [vals junk idx] = unique(X);

    vals   = vals(:);
    frequs = NaN(length(vals),1);

    for i = 1:length(vals)
        freqs(i) = mean(idx == i);
    end

    # If 0 or 1 output is requested, put the values and counts in two columns
    # of a matrix.
    if nargout < 2
        vals = [vals freqs];
    end

end
于 2013-02-05T08:51:41.827 に答える