如何在MATLAB中通过映射表将向量值替换为对应索引?
将非递减向量元素替换为其在唯一值数组中的索引
假设你已经有一个非递减的向量sortedData,并通过uniqueVals = unique(sortedData);得到了去重后的唯一值数组。下面提供两种简单的方法,把sortedData中的每个元素替换成它在uniqueVals里的索引(从1开始计数,比如示例中的6会被替换为5):
方法一:利用ismember的索引输出(最直接高效)
MATLAB的ismember函数可以返回两个输出参数,第二个参数就是原数组元素在目标数组中的位置索引:
[~, mappedIndices] = ismember(sortedData, uniqueVals);
执行后,mappedIndices就是你需要的结果数组,每个元素对应原sortedData元素在uniqueVals中的索引位置。这个方法代码简洁,几十万行数据的处理完全没问题。
方法二:使用容器映射(Map)实现
如果你更倾向于用映射对象来管理键值关系,可以按照以下步骤操作:
- 创建从唯一值到索引的映射:
valueMap = containers.Map(uniqueVals, 1:length(uniqueVals));
- 将映射应用到原向量:
mappedIndices = arrayfun(@(val) valueMap(val), sortedData);
这种方式逻辑清晰,适合需要显式管理映射关系的场景,对于你的数据量来说完全够用。
内容的提问来源于stack exchange,提问作者Michael Stachowsky
相关产品推荐
相关产品推荐

