如何比较矩阵的列与前一列?有没有办法在没有几个for
循环的情况下做到这一点?
答案 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);