【发布时间】:2014-05-28 14:39:48
【问题描述】:
有时会提供打印的numpy 数组来共享this post 等数据。到目前为止,我手动转换了它。但是帖子中的数组太大了,无法手动转换。
我想将numpy 数组的字符串表示形式转换回数组。 (谢谢,@LevLevitsky。我参考了你的表达。)
我试过这段代码
import numpy as np
print np.array([[0, 1], [2, 3]])
#[[0 1]
# [2 3]]
# the output is
output = '''[[0 1]
[2 3]]'''
import re
pat_ignore = re.compile(r'[\[\]]')
numbers = pat_ignore.sub('', output)
print np.array([map(float, line.split()) for line in numbers.splitlines()])
[[ 0. 1.]
[ 2. 3.]]
但是,这无法保留数据类型。另外如果ndim > 3,也不能正常工作。
[[[0 1]
[2 3]]]
被解释为
[[ 0. 1.]
[ 2. 3.]]
【问题讨论】:
-
我不明白这个问题。你想看到整个 numpy 数组打印在屏幕上,而不管大小?您想确保保留数据类型吗?
-
@mauve OP 想要将 numpy 数组的字符串表示形式转换回数组 AFAICT。
-
@LevLevitsky 正确。谢谢。
-
好吧,你必须添加一些逻辑,在开始时计算打开括号的数量并从那里派生数组维度。然后根据维度,您需要进行一些额外的解析以确保您可以处理更高维度的数组。
-
This answer 显示了类似的方法,先使用
re.sub,然后使用ast.literal_eval。