如何在Scilab中获取向量唯一值的最后出现位置?
如何在Scilab中获取向量唯一值的最后出现索引
给定数值向量y:
y = [ 2013; 2013; 2013; 2014; 2014; 2015; 2016]
Scilab的unique函数可生成包含唯一值首次出现索引的向量km:
[U, km, ku, nb] = unique(y)
得到的km结果为:
1 4 6 7
现在需要获取每个唯一值最后出现位置的索引向量,期望结果如下:
3 5 6 7
实现方法
这里提供两种实用的实现方式:
方法一:翻转向量结合unique
通过翻转原向量,利用unique获取翻转后首次出现的索引,再转换回原向量的索引位置:
y_rev = flip(y); [~, km_rev] = unique(y_rev, 'first'); // 转换为原向量的最后出现索引 last_indices = length(y) - km_rev + 1; // 按原唯一值顺序调整结果顺序 [~, sort_idx] = sort(U); last_indices = last_indices(sort_idx);
执行后last_indices即为目标结果:[3;5;6;7]
方法二:遍历唯一值查找最后索引
先获取唯一值集合,逐个查找每个值在原向量中的最后出现位置:
[U, ~, ~, nb] = unique(y); last_indices = zeros(length(U), 1); for i = 1:length(U) // 获取当前唯一值的所有索引,取最后一个 idx = find(y == U(i)); last_indices(i) = idx(end); end
该方法逻辑直观,执行后同样能得到期望的索引向量。
内容的提问来源于stack exchange,提问作者JFS
相关产品推荐
相关产品推荐

