将ndarray的字符串转换为ndarray

部族的

我有一串ndarray。我想将其转换回ndarray。我试过了newval = np.fromstring(val, dtype=float)但是它给ValueError: string size must be a multiple of element size

我也试过了newval = ast.literal_eval(val)这给

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

ndarray的字符串

 '[-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]'

如何将其转换回ndarray?

AKX

扩展我的评论:

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

而是使用NumPy数组numpy.save()并将numpy.load()其保留为有效的二进制格式。

.savetxt()如果需要人的可读性但以牺牲精度和处理速度为代价,则可以使用此方法...但是永远不要认为str(arr)您可以再次解析。

但是,要回答您的问题,如果您绝对绝望并且没有办法将数组转换为更好的格式...

>>> data = '''
... [-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]
... '''.strip()
>>> list_of_floats = [float(x) for x in data.strip('[]').split(None)]
[-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中。数组是快速文本向量。在levelDB中,存储了每个ngram(关键字)的向量(值)。您上面提到的内容在这里适用吗?

是的–您将BytesIOio模块中使用来模拟NumPy可以写入的内存中“文件”,然后将该缓冲区放入LevelDB中,并逆转该过程(从LevelDB读取为空的BytesIO并将其传递给NumPy)以进行读取:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章