[英]Construct a matrix in Matlab that keeps track of equal elements in each row
假设我在 Matlab 中有一个IxJ
矩阵A
,其中包含一些数字(可能包括Inf
, -Inf
。
例如,对于I=3
和J=5
,我可以有
A= [0 0 0 Inf -Inf;
5 4 0 Inf -Inf;
Inf -Inf 0 0 0];
我想构造一个大小为IxJ
的矩阵B
,这样每一行i
从1
开始,并且每次A(i,:)
的元素发生变化时都添加一个+1
。 在上面的例子中
B= [1 1 1 2 3; %
1 2 3 4 5;
1 2 3 3 3];
你能建议如何进行吗?
inf
或inf
值应计为不同B = cumsum([true(size(A,1),1) diff(A,[],2)~=0], 2);
它的工作原理如下:
diff(A,[],2)
沿每一行取连续的差异;~=0
将非零值转换为1
;[true(size(A,1),1)...]
在前面添加一列true
值;cumsum(..., 2)
沿每一行累积值。 这将inf
值视为不同,因为inf-inf
或diff([inf inf]
给出NaN
而不是0
。
inf
或-inf
值应分别计为相等只需将diff(...)~=0
替换为仅涉及索引和~=
的表达式:
B = cumsum([true(size(A,1),1) A(:,1:end-1)~=A(:,2:end)], 2);
这将inf
值视为相等,因为inf==inf
给出true
,或者等效地inf~=inf
给出false
,对于-inf
也是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.