是否存在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
答案 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
中的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
来加强(可能加速)。
{{1}}