簡體   English   中英

在 Matlab 中構造一個矩陣,跟蹤每行中的相等元素

[英]Construct a matrix in Matlab that keeps track of equal elements in each row

假設我在 Matlab 中有一個IxJ矩陣A ,其中包含一些數字(可能包括Inf-Inf

例如,對於I=3J=5 ,我可以有

A=  [0    0      0 Inf -Inf; 
     5    4      0 Inf -Inf;
     Inf -Inf    0 0   0];

我想構造一個大小為IxJ的矩陣B ,這樣每一行i1開始,並且每次A(i,:)的元素發生變化時都添加一個+1 在上面的例子中

B=  [1 1 1 2 3;  %
     1 2 3 4 5;
     1 2 3 3 3];

你能建議如何進行嗎?

使用diffcumsum很容易做到這一點。

如果連續的infinf值應計為不同

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-infdiff([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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM