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.unique与return_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认同)