Arrays 索引Matlab数组每行中的相等/不同元素

Arrays 索引Matlab数组每行中的相等/不同元素,arrays,matlab,matrix,Arrays,Matlab,Matrix,假设我在Matlab中有一个IxJ矩阵a,其中包含一些数字(可能包括Inf,-Inf) 例如,对于I=3和J=6,我可以 A= [0 0 Inf -Inf 0 1; 5 4 Inf -Inf 6 5; Inf -Inf 0 Inf 0 2]; 我想构造一个大小为IxJ的矩阵B,这样每一行I都从1开始,每当a(I,:)的元素改变时添加一个+1,并为相等的元素分配相等的索引。必须将两个Inf元素视为相等。同样,必须将两

假设我在Matlab中有一个
IxJ
矩阵
a
,其中包含一些数字(可能包括
Inf
-Inf

例如,对于
I=3
J=6
,我可以

A=  [0    0      Inf -Inf 0   1; 
     5    4      Inf -Inf 6   5;
     Inf -Inf    0    Inf 0   2];
我想构造一个大小为IxJ的矩阵
B
,这样每一行
I
都从
1
开始,每当
a(I,:)
的元素改变时添加一个
+1
,并为相等的元素分配相等的索引。必须将两个
Inf
元素视为相等。同样,必须将两个
-Inf
元素视为相等

在上面的例子中

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

您能就如何继续提供建议吗?

一个简单的方法是对每一行使用第三个输出,并使用
'stable'
选项:

B = NaN(size(A)); % preallocate
for k = 1:size(A,1)
   [~, ~, B(k,:)] = unique(A(k,:), 'stable');
end

谢谢有没有办法避免这种循环?在我的实际案例中,
B
的长度是
10^4
。我认为避免循环的唯一方法是使用3D数组,这可能会占用大量内存。整个
A
矩阵中的行数、列数和不同值的典型值是什么?谢谢。当然,这样循环会更好。