MATLAB Answers

Fernando
0

Product of probabilities by group

Fernando
さんによって質問されました 2012 年 12 月 8 日
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 件のコメント

サインイン to comment.

3 件の回答

Matt Fig
回答者: Matt Fig
2012 年 12 月 8 日
編集済み: Matt Fig
2012 年 12 月 8 日
 採用された回答

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 件のコメント

サインイン to comment.


the cyclist
回答者: the cyclist
2012 年 12 月 8 日

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 件のコメント

サインイン to comment.


Fernando
回答者: Fernando
2012 年 12 月 8 日

Thanks for your help!

  0 件のコメント

サインイン to comment.



Translated by