是否有一个 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
是否有一个 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
您可以使用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
解决方案中等...
这是我使用的一个函数(注释%
替换#
为 StackOverflow 无法正确解析 Matlab)。
accumarray
这可以使用或者hist
在natan 的回答中进行整理(并且可能加快)。
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