如何在matlab中获取矩阵的不同行
How to get distinct rows of a matrix in matlab
我有一个大矩阵和 MATLAB R2012b。我喜欢用它们的频率获得矩阵的不同行。怎么做?
此外,让我们认为具有相同条目的两行是相等的,即 $(0 , 0 , 1)$ 和 $(0 , 1 , 0)$ 是等价的。那么如何获取不同行的数量及其频率?
我正在尝试使用函数 sortrows()。但效率不高。我也不希望他们手动计数。
让我们定义一个示例矩阵:
A = [ 0 1 0;
1 0 0;
0 1 0;
1 1 1];
如果 具有不同顺序的行应被视为不同的:使用 unique(...,'rows')
to get unique row labels, and histc
进行计数:
[~, jj, kk] = unique(A,'rows');
unique_rows = A(jj,:);
count = histc(kk, unique(kk));
unique
的 jj
输出包含 A
的唯一行的索引。 kk
输出是一个标签,它告诉 A
的每一行,它等于 jj
给出的唯一行中的哪一行。换句话说,A(jj(kk),:)
重现 A
(但仅使用 jj
给出的一组唯一行)。
代码给出
unique_rows =
0 1 0
1 0 0
1 1 1
count =
2
1
1
如果 行应该被认为是相等的,即使它们的顺序不同:在调用 unique(...,'rows')
之前对每一行进行排序:
[~, jj, kk] = unique(sort(A,2),'rows');
unique_rows = A(jj,:);
count = histc(kk, unique(kk));
这给出了
unique_rows =
0 1 0
1 1 1
count =
3
1
我有一个大矩阵和 MATLAB R2012b。我喜欢用它们的频率获得矩阵的不同行。怎么做?
此外,让我们认为具有相同条目的两行是相等的,即 $(0 , 0 , 1)$ 和 $(0 , 1 , 0)$ 是等价的。那么如何获取不同行的数量及其频率?
我正在尝试使用函数 sortrows()。但效率不高。我也不希望他们手动计数。
让我们定义一个示例矩阵:
A = [ 0 1 0;
1 0 0;
0 1 0;
1 1 1];
如果 具有不同顺序的行应被视为不同的:使用
unique(...,'rows')
to get unique row labels, andhistc
进行计数:[~, jj, kk] = unique(A,'rows'); unique_rows = A(jj,:); count = histc(kk, unique(kk));
unique
的jj
输出包含A
的唯一行的索引。kk
输出是一个标签,它告诉A
的每一行,它等于jj
给出的唯一行中的哪一行。换句话说,A(jj(kk),:)
重现A
(但仅使用jj
给出的一组唯一行)。代码给出
unique_rows = 0 1 0 1 0 0 1 1 1 count = 2 1 1
如果 行应该被认为是相等的,即使它们的顺序不同:在调用
unique(...,'rows')
之前对每一行进行排序:[~, jj, kk] = unique(sort(A,2),'rows'); unique_rows = A(jj,:); count = histc(kk, unique(kk));
这给出了
unique_rows = 0 1 0 1 1 1 count = 3 1