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

时间:2016-02-27 10:16:13

标签: python numpy

我从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']]

1 个答案:

答案 0 :(得分:1)

假设输入是NumPy数组并且A的每一行中没有重复项,那么使用np.in1d的方法 -

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

说明 -

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

  2. 重塑从A'sn形状获取的布尔数组,然后查找每行n匹配的行,其中B是数字n中的元素。由于每行中都有唯一的元素,因此n匹配的行是我们在最终输出中需要的行。

  3. 因此,沿着行对2D重新整形的布尔数组求和,并与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') 时,会给出我们选择的行作为期望值输出

  4. 示例运行 -

    print $q->header( -cookie=>$cookie );