巨大的 Numpy 列表 - 如何获得 n 位数字?
Huge Numpy list - How to get n digit?
目前我在 numpy 中有一个庞大的随机生成数字数据库。
array([62051180209, 87882444506, 49821030805, ..., 54840854303,
21222836608, 24070750502])
现在我想看看有多少numbers for ex。 number 05,位置 3 和 4 上的 15 位数字。(例如 62-05-1180209,就像我列表中的第一个一样)
我想检查有多少数字x在其他位置有其他数字。像位置 5、6。例如,我列表中的第一个有数字 11。
正如 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])) )
然后 returns:
[True, True, False, True, False, False]
字符串运算比整数运算需要更多 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。
目前我在 numpy 中有一个庞大的随机生成数字数据库。
array([62051180209, 87882444506, 49821030805, ..., 54840854303,
21222836608, 24070750502])
现在我想看看有多少numbers for ex。 number 05,位置 3 和 4 上的 15 位数字。(例如 62-05-1180209,就像我列表中的第一个一样)
我想检查有多少数字x在其他位置有其他数字。像位置 5、6。例如,我列表中的第一个有数字 11。
正如 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])) )
然后 returns:
[True, True, False, True, False, False]
字符串运算比整数运算需要更多 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。