在MATLAB中查找每个唯一值的最小值索引

时间:2015-10-19 19:02:00

标签: matlab unique minimum

我有两个相同大小的矢量:

A = [1    2    3    1    2    3];
B = [0.1  1.5  0.2  0.7  0.5  2];

对于A中的每个唯一值,我想获得B的每个最小值的索引。在上面的例子中,我想知道B中A == 1的最小值有索引对于A == 2,B中的最小值具有索引5,依此类推。

在我的实际数据中,不需要偶数个1s,2s,3s等。我们不知道向量是多大的时间。同样地,我们不知道A的最大值,尽管可以假设A仅包含非零整数并且表示每个值到最大值(即,如果它变为4,则必须存在数字1-3)

这是我用来完成此任务的功能:

function inds = customfunction(A,B)

% Some information about A
unique_values = unique(A);
num_values = length(unique_values);

% loop over unique values of A, adding min indices to inds
inds = zeros(1,num_values);
for i=1:num_values

%   identify instances of current value
    currentvals = A == unique_values(i);

%   set up temporary variable, turn non-instances into NaN
    temp_var = B;
    temp_var(~currentvals) = NaN;

%   get min index of remaining values
    [~, inds(i)] = min(temp_var);
end

end

这个函数只是感觉效率低,尽管它确实给出了正确的结果。有谁知道更优雅的解决方案?

0 个答案:

没有答案