Чтение показателей научной нотации в Python - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь сгенерировать некоторые сводные данные для набора, поэтому меня не волнуют сами цифры, меня интересуют только экспоненты - цель состоит в том, чтобы найти общее количество 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?

Кроме того, я не ограничиваюсь использованием пустых массивов, но после некоторых экспериментовони были самой быстрой реализацией для моей цели.

1 Ответ

0 голосов
/ 10 июня 2018

Возможно, вы захотите написать собственный синтаксический анализатор, который будет использоваться при чтении файла, а не при чтении всех данных, чтобы потом отбросить его.

Количество показателей размера 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
...