我有一个包含两列的表,如下所示:
1 10
1 10
2 30
2 45
3 8
3 8
....
我(在Matlab或Octave中(如何计算不同值的数量——也就是说,第一列中每个值在第二列中的唯一值数量——并显示以下内容?
1 1
2 2
3 1
只需几个步骤即可完成
-
查找所有唯一的行,即两列的唯一组合。
unique
功能可选择执行此c = unique( a, 'rows' );
-
在第1列中查找唯一值,这些是输出的第一列
u = unique( c(:,1) );
-
循环
u
中的唯一值,并检查c
的第1列中有多少行匹配(即,有多少唯一组合使用输入a
中的第一个值(。您可以使用arrayfun
以浓缩的方式完成此操作,或者一个简单的循环将工作于n = arrayfun( @(x) nnz(x==c(:,1)), u );
现在您可以通过组合u
和n
来获得所需的输出
out = [u, n];
这为您的示例提供了所需的结果
以下是使用unique
和accumarray
的方法:
x = [1 10; 1 10; 2 30; 2 45; 3 8; 3 8];
[u, ~, w] = unique(x(:,1));
n = accumarray(w, x(:,2), [], @(t) numel(unique(t)));
result = [u n];