找到矩阵所有行的公共值

时间:2015-04-21 21:38:35

标签: matlab matlab-deployment

我有一个随机生成的矩阵

A =[ 0.7015 -1.577  -1.333  0.022   -0.5    -2.00   -0.034 -0.714
     -2.05   -0.5   1.12    -0.26   -0.97   0.96    -0.79   1.35
     -0.353  0.28   -0.5       -1.75    -1.15   0.52    1.018   -0.22
     -0.8   0.033   -0.29   -0.28   -0.5    -0.02   -0.13   -0.58 ]

我想找到所有行的常用值。每行没有重复的元素。谁能给我一个帮助?

1 个答案:

答案 0 :(得分:2)

使用unique获取唯一值的向量,然后使用bsxfunA的每个元素与每个唯一值进行比较:

u = unique(A);
m = squeeze(all(any(bsxfun(@eq, A, permute(u, [2 3 1])),2),1));
result = u(m);

这应该很快,但可能会占用大量内存,因为它会生成一个大小为 m x n x p 的3D数组,其中A m x n p A的唯一值数。即使一行可以包含重复的元素,它也能正常工作。


利用每一行没有重复元素这一事实,您可以使用accumarray可能更具内存效率的方法:

[u, ~, w] = unique(A);
m = accumarray(w,1)==size(A,1);
result = u(m);