Product of probabilities by group

2 visualizaciones (últimos 30 días)
Fernando
Fernando el 8 de Dic. de 2012
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.

Respuesta aceptada

Matt Fig
Matt Fig el 8 de Dic. de 2012
Editada: Matt Fig el 8 de Dic. de 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)];

Más respuestas (2)

the cyclist
the cyclist el 8 de Dic. de 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

Fernando
Fernando el 8 de Dic. de 2012
Thanks for your help!

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by