Python:解析由文本表示的长 double 组非常慢

标签 python floating-point

我会删除这个问题,因为事实证明这是我的错误。我遇到的瓶颈与网络延迟有关。

<小时/>

我有一个 Python 应用程序,它获取包含 4096 个实数的文本文件作为输入。它看起来像这样:

0.3421,0.1215,..........,1.242

无论我尝试什么方法,Python 都需要大约一秒钟的时间才能将文本解析为实际的 Python float 数组。

请注意,我使用的是 Python 3.5

到目前为止我尝试过:

手动解析并使用列表推导式创建列表:

arr = [float(val) for val in text.split(',')]

附加“[”和“]”换行符号并使用eval函数:

arr = eval('[' + text + ']')

附加“[”和“]”换行符并使用json.loads函数:

import json
arr = json.loads('[' + text + ']')

创建 Numpy 字符串数组并将其数据类型转换为 float:

import numpy as np
arr = np.array(text.split(',')).astype(np.float)

使用 Numpy 的 fromstring 方法

import numpy as np
arr = np.fromstring(text, sep=',')

这些选项的运行速度都不超过一整秒。

如何让它转换得更快?

最佳答案

我认为你在某种程度上进行了错误测试。这是我的结果:

import timeit

timeit.timeit('eval(s)', number=1000,
              setup="import random;"
                    " s = '[' + ','.join(str(random.random())"
                                        " for _ in range(4096)) + ']'")

结果

4.92162881999684

这意味着使用字符串的简单 eval 大约需要 5 毫秒。

使用 JSON 会更快一些:

timeit.timeit('json.loads(s)', number=1000,
              setup="import random, json;"
                    " s = '[' + ','.join(str(random.random())"
                                        " for _ in range(4096)) + ']'")

结果

1.1105524039994634

我。 e. ~1.1ms

关于Python:解析由文本表示的长 double 组非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48081124/

相关文章:

python - 用 `AB⁻¹` 计算 `np.linalg.solve()`

python - 找不到精确的轮廓检测(opencv,python)

python - Pandas 中的 dtype ('O' ) 是什么?

python - 有没有办法加快pywinauto?

c++ - 如何控制 C 数学是否使用 SSE2?

python - "x not in"与 "not x in"

c++ - float 到字符串而不四舍五入

c - 四舍五入为整数

c - 错误: invalid operands to binary >> (have 'float' and 'int' )

c - 为什么使用 `%3.3f` 打印值为 2.5367 的 float 会输出 2.537 而不是 2.536?