Python numpy数组上的str()方法

Python numpy数组上的str()方法,python,arrays,string,numpy,string-literals,Python,Arrays,String,Numpy,String Literals,例如,在应用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

例如,在应用
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
更新1:
不幸的是,我已经用
str()
方法转换了非常大的数据,因此我无法用其他方法重新转换它。

主要问题似乎是分隔符和换行符。您可以使用和来解决这些问题:

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


如果您的字符串是给定的且不可避免,您可以使用以下黑客方法:

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
的一个好处是能够指定
阈值。例如,考虑一个字符串表示:<代码> x= NP.ARANGE(10000)< /C> > /P>
  • str(x)
    将返回省略号,例如
    '[0 1 2…,9997 9998 9999]'
  • np.array2string(x,threshold=11e3)
    将返回完整的字符串

您可以使用
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))

@jpp
ast.literal\u eval
太安全了,没有用处。@MaximeGroushkin@jpp我已经更新了这个问题,我不能使用
repr()
或其他方法,这个问题只通过使用
str()
mehod来确定。真的,你应该尽可能避免这个问题。但我已经更新了一个解决方案,可以反转
str
输出。大数据字符串是否包含省略号(…)?
threshold
也限制了
str
的用途。