【问题标题】:Indexing equal/different elements in each row of a Matlab array在 Matlab 数组的每一行中索引相同/不同的元素
【发布时间】:2020-10-19 12:19:57
【问题描述】:

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

例如,对于I=3J=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];

您能建议如何进行吗?

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。有没有办法避免循环?在我的实际情况下,B 的长度是10^4
    • 我认为避免循环的唯一方法是需要一个 3D 数组,这可能会占用大量内存。整个A矩阵的行数、列数和不同值的个数的典型值是多少?
    • 谢谢。那么循环肯定会更好。
    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2016-03-31
    相关资源
    最近更新 更多