找到矩阵所有行的公共值
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,其中 A
是 mxn 和 p 是 A
的唯一值的数量。即使 一行可以包含重复的元素。
利用每行没有重复元素这一事实,您可以使用 accumarray
:
的内存效率更高的方法
[u, ~, w] = unique(A);
m = accumarray(w,1)==size(A,1);
result = u(m);
我有一个随机生成的矩阵
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,其中 A
是 mxn 和 p 是 A
的唯一值的数量。即使 一行可以包含重复的元素。
利用每行没有重复元素这一事实,您可以使用 accumarray
:
[u, ~, w] = unique(A);
m = accumarray(w,1)==size(A,1);
result = u(m);