我有一个随机生成的矩阵
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 ]
我想找到所有行的常用值。每行没有重复的元素。谁能给我一个帮助?
答案 0 :(得分:2)
使用unique
获取唯一值的向量,然后使用bsxfun
将A
的每个元素与每个唯一值进行比较:
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);