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

조회 수: 1 (최근 30일)
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.

채택된 답변

darova
darova 2019년 5월 3일
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
darova
darova 2019년 5월 3일
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);

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Sparse Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by