我希望通过在条件下测试单个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'
对于那些与上面的显式测试一样快的数组?
答案 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)