[英]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.