检查一个numpy数组中有多少个numpy数组等于另一个不同大小的numpy数组中的其他numpy数组

Eul*_*ter 5 python arrays numpy

我的问题

假设我有

a = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array([7,8]), np.array([9,10])])
b = np.array([ np.array([5,6]), np.array([1,2]), np.array([3,192])])
Run Code Online (Sandbox Code Playgroud)

它们是两个大小不同的数组,包含其他数组(内部数组的大小相同!)

我想计算b中有多少项(即内部数组)。请注意,我没有考虑他们的位置!

我怎样才能做到这一点?

我的尝试

count = 0
for bitem in b:
     for aitem in a:
         if aitem==bitem:
               count+=1
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?特别是一行,也许有些理解。

Eel*_*orn 3

numpy_indexed包包含针对这些类型问题的高效(通常为 nlogn)和矢量化解决方案

import numpy_indexed as npi
count = len(npi.intersection(a, b))
Run Code Online (Sandbox Code Playgroud)

请注意,这与双循环略有不同,例如丢弃 a 和 b 中的重复条目。如果你想在 b 中保留重复项,可以这样:

count = npi.in_(b, a).sum()
Run Code Online (Sandbox Code Playgroud)

a 中的重复条目也可以通过执行 npi.count(a) 并考虑其结果来处理;但无论如何,我只是为了说明目的而漫无目的,因为我想这种区别可能对你来说并不重要。

  • 这些方法在内存和计算方面都是二次方的;所以对于超过几个数组元素的任何东西,绝对 (2认同)