2015-04-22 92 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