我有两个相同大小的矢量:
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
这个函数只是感觉效率低,尽管它确实给出了正确的结果。有谁知道更优雅的解决方案?