在 Python 中读取科学记数法的指数
Posted
技术标签:
【中文标题】在 Python 中读取科学记数法的指数【英文标题】:Reading Exponents of Scientific Notation in Python 【发布时间】:2018-06-09 20:08:15 【问题描述】:我正在尝试在集合上生成一些摘要数据,所以我不关心数字本身我只关心指数 - 目标是找到 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 数组,但经过一些实验后,它们是我的目的最快的实现。
【问题讨论】:
你有性能问题吗? 不一定,但我希望能够尽可能高效地编码。这个数据集只有 1.5m 行,但如果它有 150m 行呢?我想至少在原则上了解如何/是否可以做到。 也许我遗漏了什么,但np.log10(x)
是否关心x
是整数还是浮点数?似乎numlist
必须已经从字符串转换为数字(我假设)。如果您知道所有输入数据总是 包含指数e
,那么您可能可以使用@James 回答在每一行中计算e+0
,从而绕过全面的解析/转换为数字。
有些相关:***.com/q/18152597/8033585
如果位数很重要,我建议计算字符串格式的字符。如果第一个数字可能是0'
,则字符串格式是唯一有效的方法。
【参考方案1】:
您可能希望编写一个自定义解析器以在读取文件时使用,而不是读取所有数据以便稍后将其丢弃。
大小为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
【讨论】:
感谢您的浏览。 感谢您的浏览。我以这种方式调用它:x = get_exponents('PhoneData.csv') print(x)
它返回一个空列表列表 [[ ], [ ], [ ], .... , [ ]] 我假设我这样做不正确。很抱歉提出业余问题-我是业余爱好者:)以上是关于在 Python 中读取科学记数法的指数的主要内容,如果未能解决你的问题,请参考以下文章