我是靠谱客的博主 现代蚂蚁,最近开发中收集的这篇文章主要介绍python数组中去掉一个元素_从另一个数组中的数组中删除元素,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

这里有一个核音速的方法,用广播:In [83]: A[np.all(np.any((A-B[:, None]), axis=2), axis=0)]

Out[83]:

array([[1, 1, 2],

[1, 1, 3]])

这里有一个时间和其他答案:In [90]: def cal_diff(A, B):

....: A_rows = A.view([('', A.dtype)] * A.shape[1])

....: B_rows = B.view([('', B.dtype)] * B.shape[1])

....: return np.setdiff1d(A_rows, B_rows).view(A.dtype).reshape(-1, A.shape[1])

....:

In [93]: %timeit cal_diff(A, B)

10000 loops, best of 3: 54.1 µs per loop

In [94]: %timeit A[np.all(np.any((A-B[:, None]), axis=2), axis=0)]

100000 loops, best of 3: 9.41 µs per loop

# Even better with Divakar's suggestion

In [97]: %timeit A[~((A[:,None,:] == B).all(-1)).any(1)]

100000 loops, best of 3: 7.41 µs per loop

好吧,如果你正在寻找一种更快的方法,你应该寻找减少比较次数的方法。在这种情况下(不考虑顺序),可以从行中生成一个唯一的数字,并比较可以通过将两个项的幂相加来完成的数字。

以下是Divakar的in1d方法的基准:In [144]: def in1d_approach(A,B):

.....: dims = np.maximum(B.max(0),A.max(0))+1

.....: return A[~np.in1d(np.ravel_multi_index(A.T,dims),

.....: np.ravel_multi_index(B.T,dims))]

.....:

In [146]: %timeit in1d_approach(A, B)

10000 loops, best of 3: 23.8 µs per loop

In [145]: %timeit A[~np.in1d(np.power(A, 2).sum(1), np.power(B, 2).sum(1))]

10000 loops, best of 3: 20.2 µs per loop

您可以使用np.diff获得与订单无关的结果:In [194]: B=np.array([[0, 0, 0,], [1, 0, 2,], [1, 0, 3,], [1, 0, 4,], [1, 1, 0,], [1, 1, 1,], [1, 1, 4,], [4, 1, 1]])

In [195]: A[~np.in1d(np.diff(np.diff(np.power(A, 2))), np.diff(np.diff(np.power(B, 2))))]

Out[195]:

array([[1, 1, 2],

[1, 1, 3]])

In [196]: %timeit A[~np.in1d(np.diff(np.diff(np.power(A, 2))), np.diff(np.diff(np.power(B, 2))))]

10000 loops, best of 3: 30.7 µs per loop

使用Divakar设置的基准:In [198]: B = np.random.randint(0,9,(1000,3))

In [199]: A = np.random.randint(0,9,(100,3))

In [200]: A_idx = np.random.choice(np.arange(A.shape[0]),size=10,replace=0)

In [201]: B_idx = np.random.choice(np.arange(B.shape[0]),size=10,replace=0)

In [202]: A[A_idx] = B[B_idx]

In [203]: %timeit A[~np.in1d(np.diff(np.diff(np.power(A, 2))), np.diff(np.diff(np.power(B, 2))))]

10000 loops, best of 3: 137 µs per loop

In [204]: %timeit A[~np.in1d(np.power(A, 2).sum(1), np.power(B, 2).sum(1))]

10000 loops, best of 3: 112 µs per loop

In [205]: %timeit in1d_approach(A, B)

10000 loops, best of 3: 115 µs per loop

较大阵列的计时(Divakar的解决方案稍快):In [231]: %timeit A[~np.in1d(np.diff(np.diff(np.power(A, 2))), np.diff(np.diff(np.power(B, 2))))]

1000 loops, best of 3: 1.01 ms per loop

In [232]: %timeit A[~np.in1d(np.power(A, 2).sum(1), np.power(B, 2).sum(1))]

1000 loops, best of 3: 880 µs per loop

In [233]: %timeit in1d_approach(A, B)

1000 loops, best of 3: 807 µs per loop

最后

以上就是现代蚂蚁为你收集整理的python数组中去掉一个元素_从另一个数组中的数组中删除元素的全部内容,希望文章能够帮你解决python数组中去掉一个元素_从另一个数组中的数组中删除元素所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部