2015-04-22 94 views

回答

2

一个与diff方式 -

B = all(diff(A,[],2)==0,2) 

bsxfun -

B = all(bsxfun(@eq,A,A(:,1)),2) 
2

这里还有一个例子更混淆了一点,但也做了工作:

B = sum(histc(A,unique(A),2) ~= 0, 2) == 1; 

那么这是如何工作的? histc统计数据集中数字的频率或出现次数。 histc最酷的地方在于我们可以独立计算一个维度的频率,所以我们可以分别计算矩阵A每一行的值的频率。 histc的第一个参数是要计算值的频率的矩阵。第二个参数表示边缘,或者您要在矩阵中查看哪些值,以计算其频率。我们可以在整个矩阵上使用unique来指定所有可能的值。下一个参数是我们想要操作的维度,并且我想沿着所有列工作,以便指定2

histc结果会给我们一个M x N矩阵,其中M是行的总数在我们的矩阵AN是唯一值的A总数。接下来,如果一行包含所有相等的值,那么在该行中应该只有一个一个值,其中所有值均在该位置处被分级,其余的值为零。因此,我们确定该矩阵中的哪些值是非零值,并将其存储到结果矩阵中,然后沿结果矩阵的列sum查看每行的总和是否。如果是,则此行的A符合所有相同的值。


当然不是那样有效Divakar的diffbsxfun方法,而是一种选择,因为他采取了两种方法,我会用:P

+1

你们是留下很少的选择未被探索! :-) –

2

一些更多的选择:

B = var(A,[],2)==0; 
B = max(A,[],2)==min(A,[],2) 
+0

OH。非常非常聪明的'最大/最小'检查。 +1。也是变化!我们甚至可以探索'mean':B = mean(A,[],2)== A(:,1);尽管存在浮点错误。 – rayryeng