根据第一列中的标签将第二列中的元素相乘

Mac*_*nos 3 arrays matlab matrix

我在Matlab工作.我有一个有两列的二维矩阵.让我们将第一列中的元素视为标签.标签可以重复.

如何将每个标签的第二列中的所有元素相乘?

例:

matrix = [1,3,3,1,5; 2,3,7,8,3]'
Run Code Online (Sandbox Code Playgroud)

我需要得到:

a = [1,3,5; 16,21,3]'
Run Code Online (Sandbox Code Playgroud)

你可以帮助我无需 for-while循环吗?

Dan*_*iel 7

我会用accumarray.预处理unique将整数索引1:n分配给第一行中的值,这样可以accumarray在不为2和4创建不必要的bin的情况下工作.它还支持负数和浮点数.

[ulable,~,uindex]=unique(matrix(:,1))
r=accumarray(uindex,matrix(:,2),[],@prod)
r=[ulable,r]
Run Code Online (Sandbox Code Playgroud)