字符串中的一个热点 - 获取唯一列表中的索引

One hot from strings - getting the index in list of uniques

有没有方便的方法从字符串数组中提取索引?我想用 NumPy 进行简单的单热编码。我有一种自己进行编码的方法,但首先我需要一个要编码的索引列表。

获取排序的唯一元素很简单。

>>> vals = np.array(['a', 'b', 'c', 'b', 'a'])
>>> uniq = np.unique(vals)
array(['a', 'b', 'c'], dtype='<U1')

然后转换就会发生。首先,我考虑使用 list.index 使用基本 Python 列表,但这涉及将列表从 ndarray 转换为 list 并返回。我想有更好的解决方案。

我想到的是:

idx = [np.where(uniq == v) for v in vals]

但这会产生一个 nd 数组。

对于预期的输出自然是:

[0, 1, 2, 1, 0]

设置return_inverse=True:

vals = np.array(['a', 'b', 'c', 'b', 'a'])
u, indices = np.unique(vals, return_inverse=True)

print(u)  # ['a' 'b' 'c']
print(indices)  # [0 1 2 1 0]