numpy数组和后面的str()方法

问题描述 投票:3回答:2

应用numpy方法后,是否有任何内置方法可以返回str()数组,例如,

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

更新1:不幸的是,我已经使用str()方法转换了非常大的数据,所以我不能用其他方法重新转换它。

python arrays string numpy string-literals
2个回答
2
投票

主要问题似乎是分隔符和换行符。您可以使用np.array2stringstr.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)将返回完整的字符串

1
投票

你可以用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))
© www.soinside.com 2019 - 2024. All rights reserved.