2010-08-19 94 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);