numpy unique 可以对数组的唯一元素进行自定义排序

问题描述 投票:0回答:2

鉴于:

R=["ip1", "ip7", "ip12", "ip5", "ip2", "ip22", "ip7", "ip1", "ip17", "ip22"]

我想获得我的列表

R
的唯一值及其相应的索引。

现在,我有

name,idx=np.unique(R,return_inverse=True)
返回:

array(['ip1', 'ip12', 'ip17', 'ip2', 'ip22', 'ip5', 'ip7'], dtype='<U4') # name
[0 6 1 5 3 4 6 0 2 4]                                                    # idx

但我想使用自定义排序,结果如下:

['ip1', 'ip2', 'ip5', 'ip7', 'ip12', 'ip17', 'ip22']
[0 3 4 2 1 6 3 0 5 6]

list
中,我可以将
Rs=sorted(R, key=lambda x: int(x[2:]))
与自定义的
key
一起使用,但我无法获得唯一值和相应的索引。

有什么方法可以操纵排序键

np.unique
或者是否已经有更好的方法来处理这个问题?

python numpy sorting
2个回答
0
投票

修改代码后。我得到了想要的输出。

import numpy as np

R = ["ip1", "ip7", "ip12", "ip5", "ip2", "ip22", "ip7", "ip1", "ip17", "ip22"]
unique_values, indices = np.unique(R, return_inverse=True)
def custom_sort_key(value):
    return int(value[2:])


sorted_indices = np.argsort([custom_sort_key(value) for value in unique_values])
sorted_unique_values = unique_values[sorted_indices]
sorted_indices = np.argsort(sorted_indices)
print(sorted_unique_values)
print(sorted_indices)

输出:

['ip1' 'ip2' 'ip5' 'ip7' 'ip12' 'ip17' 'ip22']
[0 4 5 1 6 2 3]

0
投票

转换为int后运行

unique

np.unique([int(x[2:]) for x in R], return_inverse=True)
array([0, 3, 4, 2, 1, 6, 3, 0, 5, 6])
© www.soinside.com 2019 - 2024. All rights reserved.