arrays - matlab中矩阵中的不重复数组

标签 arrays matlab matrix unique non-repetitive

我正在寻找矩阵中不重复的行。

假设:

A=

 8     1
 2     2
 2     2
 2     2
 2     2
 3     6
 5     7
 5     7

我想要得到“B”,即:

B=

 8     1
 3     6

请注意C=unique(A,'rows')将为我们提供“A”的唯一行,其中包括重复和非重复数组,并且仅删除重复行。这意味着:

C=

 2     2
 3     6
 5     7
 8     1

“C”不是我要找的。

任何帮助将不胜感激!

最佳答案

使用 unique 的第二个和第三个输出如下:

[~, ii, jj] = unique(A,'rows');
kk = find(histc(jj,unique(jj))==1);
B = A(sort(ii(kk)),:);

或者更直接地使用这个bsxfun基于方法:

B = A(sum(squeeze(all(bsxfun(@eq, A.', permute(A, [2 3 1])))))==1,:);

这两种方法的工作方式非常普遍:A 可以有任意数量的列,并且可以包含非整数值。


如果 A 始终有两列并且仅包含整数值,您也可以使用 accumarray 来完成此操作。 ,使用稀疏选项(第六个输入参数)在值较大时节省内存:

[ii jj] = find(accumarray(A, 1, [], @sum, 0, true)==1);
B = [ii jj];

或者您可以使用sparse而不是accumarray:

[ii jj] = find(sparse(A(:,1),A(:,2),1)==1);
B = [ii jj];

关于arrays - matlab中矩阵中的不重复数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959531/

相关文章:

Java TCP Socket发送字节数组

matlab - 用图像替换箭袋箭头

python - boolean 矩阵相乘

python - Matlab相当于Numpy广播?

c++ - Eigen:将 Matrix3d 旋转转换为四元数

c++ - 警告 : extended initializer lists only available with -std=c++0x or -std=gnu++0x

javascript - 打印文件中的数组数组

arrays - 如何将 *big.Int 转换为 golang 中的字节数组

c++ - 对几乎相同的代码执行不同的 vector 求和

matlab - 在 matlab 中使用 validateHandleToPrint 时出错