找到矩阵所有行的公共值

find common values of all rows of a matrix

我有一个随机生成的矩阵

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 ]

我想找出所有 rows.Each 行没有重复元素的共同值。有人可以帮我吗?

使用 unique, and then compare each element of A with each unique value using bsxfun 获取唯一值向量:

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

这应该很快,但可能会占用大量内存,因为它会生成一个大小为 mxnx[ 的 3D 数组=26=]p,其中 AmxnpA 的唯一值的数量。即使 一行可以包含重复的元素


利用每行没有重复元素这一事实,您可以使用 accumarray:

的内存效率更高的方法
[u, ~, w] = unique(A);
m = accumarray(w,1)==size(A,1);
result = u(m);