从数据到概率质量函数 - Matlab

时间:2013-02-05 08:41:49

标签: matlab

是否存在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

2 个答案:

答案 0 :(得分: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等等。

答案 1 :(得分:2)

这是我使用的一个函数(注释%替换为#,因为StackOverflow无法正确解析Matlab。)

可以使用accumarray中的histfunction [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 来加强(可能加速)。

{{1}}