Product of probabilities by group
    11 views (last 30 days)
  
       Show older comments
    
Hi,
I have matrix that contains in the first column a group identifier and in the second column a probability. I want to generate, for each group identifier, the product of the probabilities that correspond to that group.
For example
X=[1 0.5;1 0.3; 1 0.4; 2 0.7; 2 0.4];
What I want is to generate a matrix
Y=[1 (0.5*0.3*0.4);2 (0.7*0.4)];
and I can't do it "by hand" because the number of groups and the number of probabilities is huge.
Any ideas? Thanks.
0 Comments
Accepted Answer
  Matt Fig
      
      
 on 8 Dec 2012
        
      Edited: Matt Fig
      
      
 on 8 Dec 2012
  
      Here is another method. This might work best if you have groups in increments of one because it uses the group number as the index of the return array.
Y = accumarray(X(:,1),X(:,2),[],@prod);
Y(I) is the product of the probabilities belonging to the Ith group. To understand this, look at:
X = [1    0.5000
     1    0.3000
     1    0.4000
     2    0.7000
     4    0.5000
     4    0.6000
     6    0.7000
     6    0.2000];  % No group 3 or 5.
Y = accumarray(X(:,1),X(:,2),[],@prod);
Since there is no group 3 or 5 in X, Y(3) and Y(5) are zero. If there are missing groups in your array, you can still get to the desired form like:
Z = [find(Y),Y(Y~=0)];
0 Comments
More Answers (2)
  the cyclist
      
      
 on 8 Dec 2012
        Here's one way:
[uniqueX1,~,index] = unique(X(:,1));
numberUniqueX1 = numel(uniqueX1);
Y = nan(numberUniqueX1,1);
for nx = 1:numberUniqueX1
    Y(nx) = prod(X(index==nx,2));
end
0 Comments
See Also
Categories
				Find more on Random Number Generation in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

