python - 如何用另一个数组中唯一值的索引替换 numpy 数组中的重复值?
问题描述
我有一个包含重复元素的数组 a 和第二个数组 b,其中包含来自 a 的排序的唯一值(以及辅助“索引数组”c):
a = np.array(['Bob', 'Anna', 'Bob', 'Charly', 'Bob'])
b = sorted(np.unique(a))
c = np.arange(len(b))
>>> b
array(['Anna', 'Bob', 'Charly'])
>>> c
array([0, 1, 2])
我想要的是一个数组 d,其中来自 a 的值被它们在 b 中的索引替换。预期结果应如下所示:
>>>d
array([1, 0, 1, 2, 1])
任何如何获得预期结果的建议将不胜感激。
解决方案
无需创建b
or c
,您可以使用np.unique
并让它返回inverse
:
d = np.unique(a, return_inverse = True)[1]
>>> d
array([1, 0, 1, 2, 1])
以供参考:
return_inverse :布尔值,可选
如果为 True,则还返回可用于重建 ar 的唯一数组的索引(对于指定的轴,如果提供)。
替代熊猫解决方案:
import pandas as pd
pd.Categorical(a).codes
array([1, 0, 1, 2, 1], dtype=int8)
推荐阅读
- ionic-framework - Ionic 4 更改图像填充颜色
- mysql - 在 MySQL 查询中添加额外的检查
- mysql - MySQL 触发器在许多 int (0/1) 上更新 varchar depwnding
- javascript - 如何使用 JQuery 更改图像的“src”(具有多个 ID)
- php - Oauth - 在默认登录令牌中应该给予什么样的权限?
- docker - Docker exec 仅包含最后构建步骤的结果
- node.js - 使用 auth.user().onCreate 时无法读取未定义的属性“uid”
- android - Kotlin 类转换异常
- reactjs - 使用 polyfill 的 IE11 中的 SCRIPT1002/1010 错误
- go - "..." undefined ("..." 类型没有字段或方法 "...")