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)
有没有更好的办法?特别是一行,也许有些理解。
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) 并考虑其结果来处理;但无论如何,我只是为了说明目的而漫无目的,因为我想这种区别可能对你来说并不重要。