在排序数组中查找 np 数组的 ID(或索引),其中可能包含重复元素
Find IDs (or indices) of a np array in the sorted array, with possible repetitive elements
我有一个一维 numpy 数组
x=np.array([0.1,0.3,0.2,0.4,0.5,0.4])
我需要计算另一个相同大小的数组,其中每个元素都是排序数组中的 ID(或称为索引)。这里排序的数组将是 [0.1,0.2,0.3,0.4,0.5]。因此,0.1 对应于 ID 0; 0.2对应ID 1;...0.5对应ID 4。预期结果会是
[0,2,1,3,4,3]
请注意,此问题与 相似但不同
因为我们需要处理重复元素。
您可以使用 np.unique
:
uniques, out = np.unique(x, return_inverse=True)
输出(out
):
array([0, 2, 1, 3, 4, 3])
也就是说,通常应避免使用唯一的浮点数。
就用
import numpy as np
x=np.array([0.1,0.3,0.2,0.4,0.5,0.4])
>>> indeces=np.argsort(x)
>>> indeces
array([0, 2, 1, 3, 5, 4])
尝试:np.searchsorted
:
>>> x = np.array([0.1,0.3,0.2,0.4,0.5,0.4])
>>> np.searchsorted(np.unique(x), x)
array([0, 2, 1, 3, 4, 3], dtype=int32)
np.unique
按排序顺序输出唯一项。
我有一个一维 numpy 数组
x=np.array([0.1,0.3,0.2,0.4,0.5,0.4])
我需要计算另一个相同大小的数组,其中每个元素都是排序数组中的 ID(或称为索引)。这里排序的数组将是 [0.1,0.2,0.3,0.4,0.5]。因此,0.1 对应于 ID 0; 0.2对应ID 1;...0.5对应ID 4。预期结果会是
[0,2,1,3,4,3]
请注意,此问题与
您可以使用 np.unique
:
uniques, out = np.unique(x, return_inverse=True)
输出(out
):
array([0, 2, 1, 3, 4, 3])
也就是说,通常应避免使用唯一的浮点数。
就用
import numpy as np
x=np.array([0.1,0.3,0.2,0.4,0.5,0.4])
>>> indeces=np.argsort(x)
>>> indeces
array([0, 2, 1, 3, 5, 4])
尝试:np.searchsorted
:
>>> x = np.array([0.1,0.3,0.2,0.4,0.5,0.4])
>>> np.searchsorted(np.unique(x), x)
array([0, 2, 1, 3, 4, 3], dtype=int32)
np.unique
按排序顺序输出唯一项。