You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Numpy将字符串标签向量转换为索引化向量?

使用NumPy将字符串向量转换为索引化向量

当然可以用NumPy实现这个需求!而且刚好能利用你提到的np.unique()函数来完成,这也是处理分类标签(比如鸢尾花数据集的品种标签)的常用方案。

方法一:直接用np.unique()的return_inverse参数

np.unique()有一个非常实用的参数return_inverse,当设置为True时,它会返回原始数组中每个元素在唯一值数组中的索引,完全符合你要的转换效果。

示例代码:

import numpy as np

# 你的示例字符串数组
str_array = np.array(['ABC', 'DEF', 'GHI', 'DEF', 'ABC'])
# 获取唯一值数组,以及原始数组对应的索引
unique_labels, index_array = np.unique(str_array, return_inverse=True)

print(index_array)  # 输出: [0 1 2 1 0]
print(unique_labels)  # 输出: ['ABC' 'DEF' 'GHI']

这里unique_labels是排序后的唯一字符串集合,index_array就是你需要的整数索引数组。对于鸢尾花数据集的标签(比如['setosa', 'versicolor', 'virginica']),这种方法完全适用——不管标签的排序顺序如何,只要索引和标签一一对应,后续的模型训练或分析都不会受影响。

方法二:保持标签首次出现的顺序

如果你的需求是按标签第一次出现的顺序分配索引(而不是默认的排序后顺序),可以结合np.unique()的return_index参数来实现:

示例代码:

import numpy as np

str_array = np.array(['DEF', 'ABC', 'DEF', 'GHI'])
# 获取唯一值数组,以及每个唯一值在原始数组中第一次出现的索引
unique_vals, first_indices = np.unique(str_array, return_index=True)
# 按第一次出现的顺序重新排序唯一值
ordered_unique_vals = unique_vals[np.argsort(first_indices)]
# 创建标签到索引的映射字典
label_to_idx = {label: idx for idx, label in enumerate(ordered_unique_vals)}
# 转换原始数组为索引数组
index_array = np.array([label_to_idx[label] for label in str_array])

print(index_array)  # 输出: [0 1 0 2]
print(ordered_unique_vals)  # 输出: ['DEF' 'ABC' 'GHI']

和Pandas方法的对比

你提到Pandas的Series.astype('category').cat.codes可以实现类似功能,NumPy的方法优势在于不需要依赖Pandas库,更轻量化,尤其在只需要基础数值处理的场景下更高效。

内容的提问来源于stack exchange,提问作者srdg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:15:10