Arrays 索引Matlab数组每行中的相等/不同元素
假设我在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元素视为相等。同样,必须将两
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
矩阵中的行数、列数和不同值的典型值是什么?谢谢。当然,这样循环会更好。