2010-08-19 57 views
2

如何比較矩陣列與每列前一列?有沒有辦法做到這一點,而沒有幾個for循環?使用MATLAB比較列

+2

M(:,1:結束-1)== M(:,2:結束)' – Amro 2010-08-19 16:38:35

回答

1

想比較每一項與其左側的項目?

X=yourMatrix 
emptycolumn = zeros(size(X,1),1) 
comparison = [X emptycolumn]==[emptycolumn X] 

很明顯,第一列和最後一列都是假的,並不意味着任何廢棄它們的東西。

或者,如果你想比較整列是否是一樣的,並得到結果的行,只需使用all(comparison,1)

1

elementsAreEqualToElementToTheLeft = array(:,2:end) == array(:,1:end-1); 
columnsAreEqualToColumsToTheLeft = all(elementsAreEqualToElementsToTheLeft,1); 
2

對於一個矩陣M,下面的代碼將爲您提供一個邏輯行向量,其中0(false)和1(true)的邏輯行向量表示給定列和前一列之間的所有元素是否相等(忽略第一列,因爲沒有以前的列):

columnsAreEqual = all(diff(M,1,2) == 0); 

對於包含整數值的矩陣M,這將工作正常。但是,如果您正在處理浮點值,則使用函數來計算列元素之間的差異可能會導致非常小的非零值,這是由於浮點數的表示方式。由於即使非常小的值仍然不等於零,因此您需要爲以下差異選擇一些容差值,您會認爲兩個數字實際上相等:

tolerance = 1e-6; %# Any differences smaller than this are considered 0 
columnsAreEqual = all(abs(diff(M,1,2)) < tolerance);