如何重组histcounts以使用2d矩阵

时间:2015-02-14 22:20:54

标签: matlab matrix

我在matlab中有一个250000x2矩阵,在第一行中我有一个度(int,0-360°),在第二行中有一个与该值对应的float值。我的目标是计算度数值对(例如一行)的每个出现次数,并将结果写入nx3矩阵。 n在此对应于唯一行的编号 因此,我的第一步是获得有效的所有唯一值(使用unique(M, 'rows'))。但现在我想要计算所有独特的价值观。这是通过以下方法完成的:

uniqu_val = unique(values, 'rows');
instance = histcounts(values(:), uniqu_val);

这里我必须输入一个向量作为第二个元素,而不是矩阵(uniqu_val是一个nx2-dim矩阵)。但我想得到每个唯一行的出现次数,因此我不能只使用矩阵uniqu_val的一列。简而言之:我想将histcounts不仅用于1D矩阵作为边缘值,而且用于2D矩阵。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您可以使用unique中的第三个输出,然后像这样使用histcounts -

%// Find the unique rows and keep the order with 'stable' option
[uniq_val,~,row_labels] = unique(values, 'rows','stable')

%// Find the counts/instances
instances = histcounts(row_labels, max(row_labels))
%// OR with HISTC: instances = histc(row_labels, 1:max(row_labels))

%// Output the unique rows alongwith the counts 
out = [uniq_val instances(:)]

示例运行 -

>> values
values =
     2     1
     3     1
     2     3
     3     3
     1     2
     3     3
     1     3
     3     1
     3     2
     1     2
>> out
out =
     2     1     1
     3     1     2
     2     3     1
     3     3     2
     1     2     2
     1     3     1
     3     2     1