为了账号安全,请及时绑定邮箱和手机立即绑定

numpy 数组上的 str() 方法并返回

numpy 数组上的 str() 方法并返回

繁星淼淼 2021-06-05 19:05:56
是否有任何内置方法numpy在应用str()方法后取回数组,例如,import numpy as npa = np.array([[1.1, 2.2, 3.3], [4.4, 5.5, 6.6]])a_str = str(a)#to get back a?a = some_method(a_str).以下两种方法不起作用:from ast import literal_evala = literal_eval(a_str)  # Errorimport numpy as npa = np.fromstring(a_str)  # Error更新 1:不幸的是,我已经用str()方法转换了非常大的数据,所以我不能用其他方法重新转换它。
查看完整描述

2 回答

?
MM们

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) 将返回完整的字符串


查看完整回答
反对 回复 2021-06-06
?
心有法竹

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))


查看完整回答
反对 回复 2021-06-06
  • 2 回答
  • 0 关注
  • 364 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号