Python 将ndarray字符串转换为ndarray
我有一连串的麻烦。我想把它转换回Ndaray。 我尝试了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
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]'