numpy 数组和返回上的 str() 方法
str() method on numpy array and back
在应用str()
方法后,是否有任何内置方法可以取回numpy
数组,例如,
import numpy as np
a = 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_eval
a = literal_eval(a_str) # Error
import numpy as np
a = np.fromstring(a_str) # Error
更新一:
不幸的是,我已经用 str()
方法转换了非常大的数据,所以我不能用其他方法重新转换它。
主要问题似乎是分隔符和换行符。您可以使用 np.array2string
and 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)
将 return 省略号,例如'[ 0 1 2 ..., 9997 9998 9999]'
np.array2string(x, threshold=11e3)
将 return 完整的字符串
你可以用 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))
在应用str()
方法后,是否有任何内置方法可以取回numpy
数组,例如,
import numpy as np
a = 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_eval
a = literal_eval(a_str) # Error
import numpy as np
a = np.fromstring(a_str) # Error
更新一:
不幸的是,我已经用 str()
方法转换了非常大的数据,所以我不能用其他方法重新转换它。
主要问题似乎是分隔符和换行符。您可以使用 np.array2string
and 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)
将 return 省略号,例如'[ 0 1 2 ..., 9997 9998 9999]'
np.array2string(x, threshold=11e3)
将 return 完整的字符串
你可以用 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))