Numpy删除重复的列值

use*_*122 5 python arrays numpy

我有一个numpy数组如下

array([[ 6,  5],
   [ 6,  9],
   [ 7,  5],
   [ 7,  9],
   [ 8, 10],
   [ 9, 10],
   [ 9, 11],
   [10, 10]])
Run Code Online (Sandbox Code Playgroud)

我想选择y坐标是唯一的元素.如果两个y坐标相同,我想选择x坐标较小的元素.

预期产出

array([[ 6,  5],
   [ 6,  9],
   [ 8, 10],
   [ 9, 11]])
Run Code Online (Sandbox Code Playgroud)

说明

[6,5][7,5]

[8,10][9,10][10,10]

[9, 11]

谢谢

use*_*203 7

首先,按第一列排序:

a = a[a[:, 0].argsort()]
Run Code Online (Sandbox Code Playgroud)

返回使用唯一指标np.uniquereturn_index标志:

a[np.unique(a[:, 1], return_index=True)[1]]

array([[ 6,  5],
       [ 6,  9],
       [ 8, 10],
       [ 9, 11]])
Run Code Online (Sandbox Code Playgroud)

一些时间:

a = np.random.randint(1, 10, 10000).reshape(-1, 2)

In [45]: %timeit rows_by_unique_y(a)
3.83 ms ± 137 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [46]: %timeit argsort_unique(a)
370 µs ± 8.26 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Run Code Online (Sandbox Code Playgroud)

是的,我的方法使用初始排序,但在Python中以numpy beat迭代方式进行矢量化操作.

  • +1,干杯.你的确有一个低得多的常数!我常常低估Python解释器的速度. (2认同)