How can I match two vectors using the discrete inverse transform method?

1 vue (au cours des 30 derniers jours)
Tchilabalo
Tchilabalo le 3 Mai 2019
Commenté : Tchilabalo le 4 Mai 2019
iV=reshape(pr,1,[]);% pr represents the pobability matrix
V=cumsum(V)/sum(V);
figure, cdfplot(prc)
U=rand(1,100)
I have a probability map (V) containing 4096 elements (see figure). I've also generated a vector U containing 100 random uniform probabilities. Now i want to match each elment of U to the correseponding probalility on the figure, using the discrete inverse transform method (Vj-1=<Ui<Vj). I'll apprecaite your help.

Réponse acceptée

darova
darova le 3 Mai 2019
Give each element of U and compare with every element of V
ind = zeros(size(U));
for i = 1:length(U(:))
[~, ind(i)] = min( abs(U(i)-V) );
end
I think ismember() can be faster solution, but don't know how to apply it here
  4 commentaires
darova
darova le 3 Mai 2019
tol = 1000; % tolerance: 3 position after decimal point
[~, ind] = ismember( round(U(:)*tol),round(V(:)*tol) );
% V(:) - reshape matrix to vector
% U(i) == V(ind(i)) - (if ind(i) is not zero)
If you have linear index and want to convert it to [rows,columns]:
matrix_size = [m,n];
[I,J] = ind2sub(matrix_size,IND);
Tchilabalo
Tchilabalo le 4 Mai 2019
Thanks for your help.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Sparse Matrices dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by