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]
谢谢
首先,按第一列排序:
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迭代方式进行矢量化操作.