我有一个矩阵A
在尺寸mxn
的Matlab。我想构建尺寸为mx1
的向量B,使B(i)=1
如果A(i,:)
的所有元素都相等,并且0
否则。任何建议?例如。在Matlab中检查行元素的相等性?
A=[1 2 3; 9 9 9; 2 2 2; 1 1 4]
B=[0;1;1;0]
我有一个矩阵A
在尺寸mxn
的Matlab。我想构建尺寸为mx1
的向量B,使B(i)=1
如果A(i,:)
的所有元素都相等,并且0
否则。任何建议?例如。在Matlab中检查行元素的相等性?
A=[1 2 3; 9 9 9; 2 2 2; 1 1 4]
B=[0;1;1;0]
这里还有一个例子更混淆了一点,但也做了工作:
B = sum(histc(A,unique(A),2) ~= 0, 2) == 1;
那么这是如何工作的? histc
统计数据集中数字的频率或出现次数。 histc
最酷的地方在于我们可以独立计算一个维度的频率,所以我们可以分别计算矩阵A
每一行的值的频率。 histc
的第一个参数是要计算值的频率的矩阵。第二个参数表示边缘,或者您要在矩阵中查看哪些值,以计算其频率。我们可以在整个矩阵上使用unique
来指定所有可能的值。下一个参数是我们想要操作的维度,并且我想沿着所有列工作,以便指定2
。
从histc
结果会给我们一个M x N
矩阵,其中M
是行的总数在我们的矩阵A
和N
是唯一值的A
总数。接下来,如果一行包含所有相等的值,那么在该行中应该只有一个一个值,其中所有值均在该位置处被分级,其余的值为零。因此,我们确定该矩阵中的哪些值是非零值,并将其存储到结果矩阵中,然后沿结果矩阵的列sum
查看每行的总和是否。如果是,则此行的A
符合所有相同的值。
当然不是那样有效Divakar的diff
和bsxfun
方法,而是一种选择,因为他采取了两种方法,我会用:P
一些更多的选择:
B = var(A,[],2)==0;
B = max(A,[],2)==min(A,[],2)
OH。非常非常聪明的'最大/最小'检查。 +1。也是变化!我们甚至可以探索'mean':B = mean(A,[],2)== A(:,1);尽管存在浮点错误。 – rayryeng
你们是留下很少的选择未被探索! :-) –