目前我在numpy中有一个庞大的随机生成数字数据库。
array([62051180209, 87882444506, 49821030805, ..., 54840854303,
21222836608, 24070750502])
现在我想检查一下前05号有多少个数字,第3位和第4位有15位数字。(例如62-05-1180209,就像我名单上的第一个(
我想查一下有多少数字在其他位置有其他数字。与位置5、6类似。例如,我名单上的第一位有11号。
字符串上的操作比整数占用更多的CPU和RAM。使用整数数学代替要快得多
def get_matches(array, start, end, value):
return np.remainder(array // 10**start, 10**(end-start)) == value
解释:
array // 10**start
使用整数除法在末尾删除start
位np.remainder
删除除end-start
后面的数字以外的所有数字== value
检查该值是否匹配。请注意,若要检查两位数字是否为05,则值应仅为5
正如Random Davis已经建议的那样,这可能会奏效:
import numpy as np
mylist = np.array([62011180209, 87882444506, 49821030805, 54840854303,21222836608, 24070750502])
def get_matches(mylist, start, end, value):
value = str(value)
return [str(i)[start:end+1]==value for i in mylist]
get_matches(mylist, start=3, end=4, value=11)
对于该列表,它提供了以下结果:
[True, False, False, False, False, False]
如果应该考虑多种选择,那么使用一种简单的方法,可以将上述函数重写如下:
def get_matches_multichoice(mylist, start, end, valuelist):
valuelist = [str(value) for value in valuelist]
return [str(i)[start:end+1] in valuelist for i in mylist]
调用是针对上述数据示例:
print (get_matches_multichoice(mylist, start=3, end=5, valuelist=np.array([111, 824, 408])) )
然后返回:
[True, True, False, True, False, False]