读取打印的numpy数组
有时候,我们打印出来的 numpy
数组是为了分享一些数据,比如这篇帖子。到目前为止,我都是手动转换这些数据。但是帖子里的数组太大了,手动转换实在太麻烦。
我想把一个字符串形式的 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.]]
2 个回答
0
另一个回复的做法很好,但如果值是数字的话,可以简化一些。此外,你可能会有一个多维数组,甚至是多个维度的数组。给定 npstr
,你的 str(np.array):
import re, json
import numpy as np
# 1. replace those spaces and newlines with commas.
# the regex could be '\s+', but numpy does not add spaces.
t1 = re.sub('\s',',',npstr)
# 2. covert to list
t2 = json.loads(t1)
# 3. convert to array
a = np.array(t2)
在一行代码中(虽然这样写不太规范,但适合复制粘贴):
a = np.array(json.loads(re.sub('\s',',',npstr)))
14
你可以使用 re
这个模块来处理字符串,然后用 eval()
来创建数组:
import re
from ast import literal_eval
import numpy as np
a = """[[[ 0 1]
[ 2 3]]]"""
a = re.sub(r"([^[])\s+([^]])", r"\1, \2", a)
a = np.array(literal_eval(a))