numpy char数组上的模式匹配

时间:2017-03-19 00:10:35

标签: python arrays numpy

我希望通过在条件下测试单个char数组mask中的每个位置来获得结果的布尔数组arr

(arr == 'A') | (arr == 'C') | (arr == 'G') | (arr == 'T')

例如:

>>> arr = np.array(list('AT.NGA-TCGACA'))
>>> arr
array(['A', 'T', '.', 'N', 'G', 'A', '-', 'T', 'C', 'G', 'A', 'C', 'A'], 
      dtype='|S1')
>>> mask = (arr == 'A') | (arr == 'C') | (arr == 'G') | (arr == 'T')
>>> mask
array([ True,  True, False, False,  True,  True, False,  True,  True,
        True,  True,  True,  True], dtype=bool)

本着

的精神,是否有这种测试的捷径
string in 'ACGT' 

对于那些与上面的显式测试一样快的数组?

2 个答案:

答案 0 :(得分:1)

您想要np.in1d

>>> arr = np.random.choice(['A','B','C','D','G','T'], 100, replace=True)
>>> arr
array(['C', 'C', 'B', 'A', 'C', 'A', 'D', 'A', 'T', 'B', 'C', 'C', 'C',
       'G', 'C', 'D', 'D', 'D', 'G', 'G', 'G', 'C', 'B', 'C', 'A', 'A',
       'B', 'G', 'B', 'A', 'D', 'A', 'T', 'D', 'A', 'T', 'T', 'G', 'B',
       'D', 'G', 'D', 'B', 'C', 'A', 'G', 'A', 'C', 'T', 'C', 'D', 'D',
       'G', 'C', 'G', 'C', 'G', 'B', 'G', 'G', 'D', 'D', 'B', 'B', 'B',
       'C', 'B', 'A', 'T', 'B', 'B', 'A', 'A', 'A', 'B', 'C', 'C', 'G',
       'G', 'B', 'A', 'A', 'G', 'C', 'C', 'D', 'A', 'D', 'B', 'D', 'G',
       'C', 'T', 'T', 'C', 'G', 'T', 'T', 'G', 'B'],
      dtype='<U1')

然后,

>>> np.in1d(arr, ['A','C','G','T'])
array([ True,  True, False,  True,  True,  True, False,  True,  True,
       False,  True,  True,  True,  True,  True, False, False, False,
        True,  True,  True,  True, False,  True,  True,  True, False,
        True, False,  True, False,  True,  True, False,  True,  True,
        True,  True, False, False,  True, False, False,  True,  True,
        True,  True,  True,  True,  True, False, False,  True,  True,
        True,  True,  True, False,  True,  True, False, False, False,
       False, False,  True, False,  True,  True, False, False,  True,
        True,  True, False,  True,  True,  True,  True, False,  True,
        True,  True,  True,  True, False,  True, False, False, False,
        True,  True,  True,  True,  True,  True,  True,  True,  True, False], dtype=bool)
>>>

答案 1 :(得分:0)

binFunc中的

您可以使用numpy

示例:

setdiff1d(a, b)