如何用另一个数组中唯一值的索引替换numpy数组中的循环值?

2024-05-29 04:52:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含循环元素的数组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])

如有任何关于如何达到预期效果的建议,我们将不胜感激。你知道吗


Tags: 元素len排序np数组array建议charly
3条回答

类似于阿文的答案,你可以做

a = ['Bob', 'Anna', 'Bob', 'Charly', 'Bob']
b = sorted(list(set(a)))
c = [b.index(x) for x in a]

不过,我想补充一点,numpy是一个数值计算库。你可以/应该只使用列表。你知道吗

使用以下代码。你知道吗

d = [b.index(i) for i in a]

无需创建bc,您可以使用^{}并让它返回inverse

d = np.unique(a, return_inverse = True)[1]                                                           
>>> d
array([1, 0, 1, 2, 1])

供参考:

return_inverse : bool, optional

If True, also return the indices of the unique array (for the specified axis, if provided) that can be used to reconstruct ar.

替代解决方案:

import pandas as pd
pd.Categorical(a).codes
array([1, 0, 1, 2, 1], dtype=int8)

相关问题 更多 >

    热门问题