我在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矩阵。我该如何解决这个问题?
答案 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