Mig*_*uel 3 matlab function probability sampling probability-density
我有一个任意概率密度函数在 Matlab 中离散为矩阵,这意味着对于每对 x,y,概率存储在矩阵中:A(x,y) = 概率
这是一个 100x100 矩阵,我希望能够从这个矩阵中生成二维 (x,y) 的随机样本,并且如果可能的话,能够计算 PDF 的均值和其他矩。我想这样做是因为在重采样后,我想将样本拟合到近似的高斯混合模型。
我一直在寻找任何地方,但我没有找到任何像这样具体的东西。我希望你能帮助我。
谢谢你。
如果您确实有一个由 定义的离散A概率密度函数(而不是仅由 描述的连续概率密度函数A),您可以通过将 2D 问题转换为 1D 问题来“欺骗”。
%define the possible values for the (x,y) pair
row_vals = [1:size(A,1)]'*ones(1,size(A,2)); %all x values
col_vals = ones(size(A,1),1)*[1:size(A,2)]; %all y values
%convert your 2D problem into a 1D problem
A = A(:);
row_vals = row_vals(:);
col_vals = col_vals(:);
%calculate your fake 1D CDF, assumes sum(A(:))==1
CDF = cumsum(A); %remember, first term out of of cumsum is not zero
%because of the operation we're doing below (interp1 followed by ceil)
%we need the CDF to start at zero
CDF = [0; CDF(:)];
%generate random values
N_vals = 1000; %give me 1000 values
rand_vals = rand(N_vals,1); %spans zero to one
%look into CDF to see which index the rand val corresponds to
out_val = interp1(CDF,[0:1/(length(CDF)-1):1],rand_vals); %spans zero to one
ind = ceil(out_val*length(A));
%using the inds, you can lookup each pair of values
xy_values = [row_vals(ind) col_vals(ind)];
Run Code Online (Sandbox Code Playgroud)
我希望这个对你有用!
芯片