Compute probability of each element in each column of a m x n matrix.

조회 수: 7 (최근 30일)
hello_world
hello_world 2014년 11월 24일
답변: Sukumar GV 2018년 7월 29일
Hello Friends,
I have a m x n matrix. I want to compute the probability of each element occurring in a column. I want to do it for each column.
For instance, suppose we have a 3 x 4 matrix:
A = [1 1 3 2; 2 3 0 2; 3 1 0 2];
Then, I would like to have the following matrix of probabilities: _P(A) = [ 1/3 2/3 1/3 1; 1/3 1/3 2/3 1; 1/3 2/3 2/3 1];_
Here, entries in P(A) are the probabilities of each element within the column.
For the 1st column: p(1) = p(2) = p(3) = 1/3
For the 2nd column: p(1) = 2/3, p(3) = 1/3
For the 3rd column: p(3) = 1/3, p(0) = 2/3
For the 4th column: p(2) = 3/3 = 1.
Please advise.

채택된 답변

hello_world
hello_world 2014년 11월 25일
I found the solution of my own problem posted above. Though, thanks for your kind help. I will still appreciate different ways to solve it specially with hist(), and histc(). Here is my solution to this problem:
[r, c] = size(A);
y = zeros(r,c);
p = zeros(r,c);
for i = 1:c %Looping through the column.
for j = 1:r %Looping through the row in that that column.
y(j,i) = sum(A(:,[i]) == A(j,i)); %Compare each column of the matrix with the entries in that column.
p(j,i) = y(j,i)/r; %Probability of each entry of a column within that column.
end
end

추가 답변 (2개)

Sukumar GV
Sukumar GV 2018년 7월 29일
You can use the following.
Suppose Matrix is X
[a, b] = hist (X, unique(X))
a/size(X,1)
each row represents item and each column represents the dimension

Yu Jiang
Yu Jiang 2014년 11월 24일
편집: Yu Jiang 2014년 11월 24일
One possible but most likely not optimal way is to use the function "find" to count the number of occurrence of a particular number. For example,
[r,c] = size(A); % get the column of A
nr = 0:3; %range of the numbers
P = zeros(r,c); % create a matrix to store the probabilities
for j = 1:c % check each row
for i = 1:length(nr) % check each particular number
P(i,j) = length(find(A(:,j) == nr(i)))/r; % count the occurrence
end
end
  댓글 수: 3
Hugo
Hugo 2014년 11월 24일
The range of the numbers refers to the minimum and the maximum number in your matrix. You can just replace the line nr=0:3; with nr=min(A(:)):max(A(:));
This will only work, of course, if A contains only integers. If it doesn't, things get a little more complicated. Hope this helps.
hello_world
hello_world 2014년 11월 24일
편집: hello_world 2014년 11월 24일
Thanks for help, though entries in my matrix are not integers. They are real number.
By making your suggested improvement, it gives me a 6 x 5 matrix of probabilities for a 3 x 5 size of matrix A. How is it possible? Should not I get a 3 x 5 size probability matrix instead?

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

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by