【发布时间】:2018-09-19 14:07:08
【问题描述】:
看起来我在 Python3.x 中有一个格式错误的 numpy 数组——它被保存为字符串列表的列表。
foo = [[7.0352220e-01 5.3130367e-06 1.5167372e-05 1.0797821e-06]
[1.3130367e-06 2.4584832e-01 2.2375602e-05 7.3299240e-06] [7.2646574e-06 7.1252006e-06 3.0184277e-01 ... 1.0048618e-05 3.1828706e-06 1.0196264e-06]..]
尝试将此数据作为 np.float32 读入 numpy 数组时出现以下错误:
np.asarray(foo, dtype=np.float32)
错误:
ValueError: could not convert string to float:[[7.0352220e-01 5.3130367e-06 1.5167372e-05 1.0797821e-06][1.3130367e-06 2.4584832e-01 2.2375602e-05 7.3299240e-06] [7.2646574e-06 7.1252006e-06 3.0184277e-01 ... 1.0048618e-05 3.1828706e-06 1.0196264e-06]..]
我尝试将每个列表元素显式转换为浮点数,如下所示:
try2 = np.asarray(map(np.float32, foo))
但它卡在一个支架上:
ValueError: could not convert string to float: [
将字符串列表转换为 numpy 数组的推荐方法是什么,输入 float?
【问题讨论】:
-
在map之前,对每个元素使用split。
-
foo到底是什么?错误表明它是一个字符串。如果它确实是一个嵌套的字符串列表,并且单独的字符串是有效的浮点表示,那么您的asarray将可以正常工作。问题是它甚至不是列表的有效字符串表示形式——它缺少JSON需要的逗号。正如您所注意到的,[]搞砸了对split的简单尝试。没有一种方法可以解决这个问题。您可以通过各种方式编辑字符串以使其可解析 - 插入逗号、删除 [] 等。 -
另一件事——看那些'...'。那是缺少数据。这看起来像一个 numpy 数组的字符串表示。您无法从此字符串中恢复该数组。
标签: python string python-3.x numpy floating-point