【问题标题】:Evaluating complex expressions with ast.literal_eval()使用 ast.literal_eval() 评估复杂表达式
【发布时间】:2017-06-30 16:50:00
【问题描述】:

我正在运行 python 3.5 并尝试将一大串字符串转换为 numpy 数组。

我使用answer from stack overflow 将这段代码放在一起。

import ast
import numpy as np
str = '["8.4","4.3E-7"]'
arr = ast.literal_eval(str)
x = np.array(arr, dtype='|S4')
y = x.astype(np.float32)

我收到以下值错误

ValueError: could not convert string to float: '4.3E'

str 是一个示例字符串,大多数数字没有 E-something 模式,但偶尔会发生这种情况,我的代码会挂起。

在这种情况下有没有办法将字符串转换为 numpy 数组?

【问题讨论】:

  • |S4 的最大长度为 4 个字符。你没有给足够的空间。
  • 不过,您根本不需要指定 dtype。将为您推断。 (我会去编辑其他答案以澄清事情。)
  • @user2357112 如果您只是发布答案,我将能够正式接受。不过感谢您的回答...事实证明,从这个社区可以学到很多东西:)

标签: python arrays string python-3.x numpy


【解决方案1】:

您的输入包含一个数字 (4.3E-7) 的 6 字符长字符串表示,但您告诉 numpy 最多只能导入 4 个字符。将dtype='|S4' 更改为dtype='|S6',或者完全删除它并让numpy 找出字符串的长度。另外,请确保避免覆盖str,以免带来麻烦!

import ast
import numpy as np
s = '["8.4","4.3E-7"]' # don't overwrite str!
arr = ast.literal_eval(s)
x = np.array(arr) # changed length
y = x.astype(np.float32)

【讨论】:

  • 完全删除 dtype 说明符并让 NumPy 计算出字符串需要多少空间会更简单。
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-08
  • 2010-10-22
  • 2015-06-26
相关资源
最近更新 更多