使用MATLAB比较列

时间:2010-08-19 16:11:30

标签: matlab matrix

如何比较矩阵的列与前一列?有没有办法在没有几个for循环的情况下做到这一点?

3 个答案:

答案 0 :(得分:2)

对于矩阵M,下面的代码将为您提供零(false)和1(true)的逻辑行向量,以确定给定列和前一列之间的所有元素是否相等(忽略第一列,因为没有前一列):

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

这适用于包含整数值的矩阵M。但是,如果您正在处理浮点值,那么使用DIFF函数计算列元素之间的差异可能会导致非常小的非零值,因为浮点数是多少表示。因为即使非常小的值仍然不等于零,您将需要为差值选择一些容差值,您可以认为两个数字实际上是相等的:

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

答案 1 :(得分:1)

您想要将每个项目与其左侧的项目进行比较吗?

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

显然,第一列和最后一列都是假的,并不代表任何东西,所以放弃它们。

或者,如果您想比较整列是否相同,并获得行结果,只需使用all(comparison,1)

答案 2 :(得分:1)

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