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)。

accumarray这可以使用或者histnatan 的回答中进行整理(并且可能加快)。

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 回答