我有一个包含很多条目的numpy数组,如(102,6,7,192,29 ......)。然而,它们经常重复,因此只有32个唯一数字。创建从32个唯一数字到0-31范围的映射的最佳方法是什么。我正在考虑一个函数,我可以在数组中输入包含所有32个不同的"高数字"然后我得到一个与原始长度相同的数组,但所有值都在0-31范围内。
答案 0 :(得分:1)
Numpy unique
函数可以执行此操作,您只需要告诉它返回可用于重建原始数组的唯一数组的索引。这是一个简短的演示,基于文档中的示例。
import numpy as np
np.random.seed(42)
# Create an array of repeated "large" values
a = np.random.randint(0, 5, size=20) * 11
print(a)
# Extract the sorted unique values, and the indices of the unique
# array which can be used to reconstruct the original array
u, inv = np.unique(a, return_inverse=True)
print(inv)
new = u[inv]
print(new)
<强>输出强>
[33 44 22 44 44 11 22 22 22 44 33 22 44 11 33 11 33 44 0 33]
[3 4 2 4 4 1 2 2 2 4 3 2 4 1 3 1 3 4 0 3]
[33 44 22 44 44 11 22 22 22 44 33 22 44 11 33 11 33 44 0 33]