Python:重新映射并缩小数字范围
Python: Remap and reduce the range of numbers
我有一些大的唯一编号,它们是某种设备身份
clusteringOutput[:,1]
Out[140]:
array([1.54744609e+12, 1.54744946e+12, 1.54744133e+12, ...,
1.54744569e+12, 1.54744570e+12, 1.54744571e+12])
尽管数字很大,但只是重复输入的数字中的一小部分。
我想将它们重新映射到更小的整数范围。因此,如果这些数字只有 100 个不同的值,那么我想使用映射 table 将它们映射到 1-100 的范围内,这样我就可以找到并查看这些映射。
网上的remapping函数,一般会rescale,我不想rescale。我想要具体的整数来映射更长的 ID,我必须更简单地映射到眼睛数字。
关于如何实现它的任何想法?如果有帮助,我可以使用 pandas 数据框。
非常感谢
亚历克斯
将numpy.unique
与return_inverse=True
一起使用:
import numpy as np
arr = np.array([1.54744609e+12,
1.54744946e+12,
1.54744133e+12,
1.54744133e+12,
1.54744569e+12,
1.54744570e+12,
1.54744571e+12])
mapper, ind = np.unique(arr, return_inverse=True)
ind
的输出:
array([4, 5, 0, 0, 1, 2, 3])
重新映射使用 mapper
:
mapper[ind]
# array([1.54744609e+12, 1.54744946e+12, 1.54744133e+12, 1.54744133e+12,
# 1.54744569e+12, 1.54744570e+12, 1.54744571e+12])
验证:
all(arr == mapper[ind])
# True
我有一些大的唯一编号,它们是某种设备身份
clusteringOutput[:,1]
Out[140]:
array([1.54744609e+12, 1.54744946e+12, 1.54744133e+12, ...,
1.54744569e+12, 1.54744570e+12, 1.54744571e+12])
尽管数字很大,但只是重复输入的数字中的一小部分。
我想将它们重新映射到更小的整数范围。因此,如果这些数字只有 100 个不同的值,那么我想使用映射 table 将它们映射到 1-100 的范围内,这样我就可以找到并查看这些映射。
网上的remapping函数,一般会rescale,我不想rescale。我想要具体的整数来映射更长的 ID,我必须更简单地映射到眼睛数字。
关于如何实现它的任何想法?如果有帮助,我可以使用 pandas 数据框。
非常感谢 亚历克斯
将numpy.unique
与return_inverse=True
一起使用:
import numpy as np
arr = np.array([1.54744609e+12,
1.54744946e+12,
1.54744133e+12,
1.54744133e+12,
1.54744569e+12,
1.54744570e+12,
1.54744571e+12])
mapper, ind = np.unique(arr, return_inverse=True)
ind
的输出:
array([4, 5, 0, 0, 1, 2, 3])
重新映射使用 mapper
:
mapper[ind]
# array([1.54744609e+12, 1.54744946e+12, 1.54744133e+12, 1.54744133e+12,
# 1.54744569e+12, 1.54744570e+12, 1.54744571e+12])
验证:
all(arr == mapper[ind])
# True