2 回答
TA贡献1886条经验 获得超2个赞
主要问题似乎是分隔符和换行符。您可以使用np.array2string和str.splitlines来解决它们:
import numpy as np
from ast import literal_eval
a = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]])
a_str = ''.join(np.array2string(a, separator=',').splitlines())
# '[[ 1.1, 2.2, 3.3], [ 4.4, 5.5, 6.6]]'
b = np.array(literal_eval(a_str))
# array([[ 1.1, 2.2, 3.3],
# [ 4.4, 5.5, 6.6]])
请注意,没有任何参数的np.array2string行为类似于str.
如果你的字符串是不可避免的,你可以使用这个hacky方法:
a_str = str(a)
res = np.array(literal_eval(''.join(a_str.replace('\n', ' ').replace(' ', ','))))
array([[ 1.1, 2.2, 3.3],
[ 4.4, 5.5, 6.6]])
根据@hpaulj 的评论, 的一个好处np.array2string是能够指定threshold. 例如,考虑 的字符串表示x = np.arange(10000)。
str(x) 将返回省略号,例如 '[ 0 1 2 ..., 9997 9998 9999]'
np.array2string(x, threshold=11e3) 将返回完整的字符串
TA贡献1866条经验 获得超5个赞
你可以这样做repr:
import numpy as np
a = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]])
a_str = repr(a)
b = eval("np." + repr(a))
print(repr(a))
print(repr(b))
添加回答
举报
