如何通过numpy从大型数组中搜索数组

2024-05-16 19:44:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我从numpy开始! numpy有什么功能可以从另一个数组中搜索一个数组,并返回相似的数组? 谢谢!你知道吗

import numpy as np

def searchBinA(B = ['04','22'],A):
    result = []
    ?......?  numpy.search(B,A)?   "is this correct?"
    return result

A = [['03', '04', '18', '22', '25', '29','30'], ['02', '04', '07', '09', '14', '29','30'], \
          ['06', '08', '11', '13', '17', '19','30'], ['04', '08', '22', '23', '27', '29','30'], \
          ['03', '05', '15', '22', '24', '25','30']]

print(str(searchBinA()))


output:[['03', '04', '18', '22', '25', '29','30'], ['04', '08', '22', '23', '27', '29','30']]

Tags: import功能numpysearchreturnisdefas
1条回答
网友
1楼 · 发布于 2024-05-16 19:44:54

假设输入是NumPy数组,并且A的每一行中没有重复项,下面是一种使用^{}-

A[np.in1d(A,B).reshape(A.shape).sum(1) == len(B)]

解释-

  1. A中针对B中具有np.in1d(A,B)的任何元素获取匹配的掩码。请注意,这将是一个一维布尔数组。

  2. 将从np.in1d(A,B)获得的布尔数组重塑为A's形状,然后查找每行与n匹配的行,其中nB中的元素数。由于每一行中都有唯一的元素,因此n匹配的行就是我们希望在最终输出中使用的行。

  3. 因此,沿着行对2D重塑的布尔数组求和,并与n进行比较,得到一个布尔掩码,当索引到A时,该掩码将从中选择行作为所需的输出。

样本运行-

In [23]: A
Out[23]: 
array([['03', '04', '18', '22', '25', '29', '30'],
       ['02', '04', '07', '09', '14', '29', '30'],
       ['06', '08', '11', '13', '17', '19', '30'],
       ['04', '08', '22', '23', '27', '29', '30'],
       ['03', '05', '15', '22', '24', '25', '30']], 
      dtype='|S2')

In [24]: B
Out[24]: 
array(['04', '22'], 
      dtype='|S2')

In [25]: A[np.in1d(A,B).reshape(A.shape).sum(1) == len(B)]
Out[25]: 
array([['03', '04', '18', '22', '25', '29', '30'],
       ['04', '08', '22', '23', '27', '29', '30']], 
      dtype='|S2')

相关问题 更多 >