Python 将ndarray字符串转换为ndarray

Python 将ndarray字符串转换为ndarray,python,numpy,Python,Numpy,我有一连串的麻烦。我想把它转换回Ndaray。 我尝试了newval=np.fromstring(val,dtype=float)。但它给出了ValueError:字符串大小必须是元素大小的倍数 我还尝试了newval=ast.literal\u eval(val)。这给 File "<unknown>", line 1 [-1.45181984e-01 1.51671678e-01 1.59053639e-01 -1.02861412e-01

我有一连串的麻烦。我想把它转换回Ndaray。 我尝试了
newval=np.fromstring(val,dtype=float)
。但它给出了
ValueError:字符串大小必须是元素大小的倍数

我还尝试了
newval=ast.literal\u eval(val)
。这给

File "<unknown>", line 1
[-1.45181984e-01  1.51671678e-01  1.59053639e-01 -1.02861412e-01
                               ^
SyntaxError: invalid syntax

如何将其转换回ndarray?

在我的评论中展开:

如果您试图解析从某处获取的NumPy数组的可读字符串表示,那么您已经在做一些不应该做的事情

而是使用和以有效的二进制格式持久化NumPy数组

如果您需要人类可读性而牺牲精度和处理速度,可以使用
.savetxt()
。。。但千万不要认为<代码> STR(ARR)是可以再次解析的东西。< /P> 但是,为了回答您的问题,如果您非常绝望,并且没有办法将数组转换为更好的格式

>数据=“”
... [-1.45181984e-01 1.51671678e-01 1.59053639e-01-1.02861412e-01
…-9.70948339e-02-1.75551832e-01-7.24434480e-02 1.19182713e-01
…-4.54084426e-02-9.23779532e-02 8.87222588e-02 1.05331177e-02
…-1.31792471e-01 3.50326337e-02-6.58577830e-02 1.02670217e+00
…-5.29987812e-02 2.09167395e-02-1.19845152e-01 2.30511073e-02
…2.89404951e-02 4.17387672e-02-2.08203331e-01 2.3434342851E-02]
... '''.条带()
>>>列表浮点数=[data.strip('[]').split中x的浮点数(x)]
[-0.145181984, 0.151671678, 0.159053639, -0.102861412, -0.0970948339, -0.175551832, -0.072443448, 0.119182713, -0.0454084426, -0.0923779532, 0.0887222588, 0.0105331177, -0.131792471, 0.0350326337, -0.065857783, 1.02670217, -0.0529987812, 0.0209167395, -0.119845152, 0.0230511073, 0.0289404951, 0.0417387672, -0.208203331, 0.0234342851]
编辑:对于评论中提到的案例OP


我将这些数组作为键值对存储在LevelDB中。数组是fasttext向量。在levelDB中,存储每个ngram(键)的向量(值)。你上面提到的适用于这里吗

是–您可以使用模拟NumPy可以写入的内存中“文件”,然后将该缓冲区放入LevelDB,并将该过程反向(从LevelDB读取到空字节并将其传递给NumPy)以读取:

bio=io.BytesIO()
np.save(bio,my_数组)
ldb.put('my-key',bio.getvalue())
# ...
bio=io.BytesIO(ldb.get('my-key'))
my_数组=np.load(bio)

老实说,一开始就没有这样的东西。(由于数字在此处四舍五入,您已经丢失了信息。)请将数组序列化为机器可读格式,而不是尝试遍历供人使用的字符串。以字节格式保存是否可以?如果您将数据保存到磁盘以仅与NumPy一起使用,使用和
numpy.load
。我将这些数组作为键值对存储在LevelDB中。数组是fasttext向量。在levelDB中,存储每个ngram(键)的向量(值)。你上面提到的适用于这里吗?是的。您可以使用类似于
bio=io.BytesIO()的东西;np.save(bio,my_数组);ldb.put('my-key',bio.getvalue())
保存并
bio=io.BytesIO(ldb.get('my-key');arr=净负荷(生物)以加载。
 '[-1.45181984e-01  1.51671678e-01  1.59053639e-01 -1.02861412e-01
 -9.70948339e-02 -1.75551832e-01 -7.24434480e-02  1.19182713e-01
 -4.54084426e-02 -9.23779532e-02  8.87222588e-02  1.05331177e-02
 -1.31792471e-01  3.50326337e-02 -6.58577830e-02  1.02670217e+00
 -5.29987812e-02  2.09167395e-02 -1.19845152e-01  2.30511073e-02
  2.89404951e-02  4.17387672e-02 -2.08203331e-01  2.34342851e-02]'