Product of probabilities by group

5 views (last 30 days)
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.

Accepted Answer

Matt Fig
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)];

More Answers (2)

the cyclist
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));

Fernando on 8 Dec 2012
Thanks for your help!


Find more on Creating and Concatenating Matrices 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!

Translated by