我正在尝试生成一些集合的摘要数据,所以我不关心数字本身,我只关心指数 - 目标是找到 7 位数字的总数(例如电话号码(。 我目前处理这个问题的方式非常简单
我有一个CSV数据集,它看起来像这样:
"1.108941100000000000e+07, 4.867837000000000000e+06, ...">
# numlist is the dataset
x = np.trunc(np.log10(numlist))
total = (x == 6).sum()
这给了我7位数字的数量。 当我选择这种方法时,我假设输入将是整数列表,但现在我看到数据实际上可以以科学记数法给出/存储。 如果它是用科学记数法给出的,有没有更快的方法来达到相同的结果? 有没有办法我只能从 csv 文件中加载指数并完全跳过 log10 行为?
此外,我不仅限于使用 numpy 数组,但经过一些实验,它们是实现我目的的最快实现。
您可能希望编写一个自定义解析器,以便在读取文件时使用,而不是读取所有数据只是为了稍后将其丢弃。
大小为n
的指数计数
def count_exponents(path, n):
n_str = 'e+0' + str(n)
out = 0
with open(path) as fp:
for line in fp:
out += line.count(n_str)
return out
返回指数
import re
pattern = re.compile('e([+-]d+)')
def get_exponents(path):
with open(path) as fp:
out = [pattern.findall(line) for line in fp]
return out