gpt4 book ai didi

python - 将 ndarray 字符串转换为 ndarray

转载 作者:行者123 更新时间:2023-11-28 21:33:01 48 4
gpt4 key购买 nike

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

我还尝试了newval = ast.literal_eval(val)。这给出了

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

String of 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?

最佳答案

扩展我的评论:

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

而是使用 numpy.save()numpy.load()以高效的二进制格式保存 NumPy 数组。

如果您需要以牺牲精度和处理速度为代价的人类可读性,也许可以使用 .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,

I am storing these arrays in LevelDB as key value pairs. The arrays are fasttext vectors. In levelDB vector (value) for each ngram (key) are stored. Is what you mentioned above applicable here?

是的 – 您可以使用BytesIO from the io module模拟 NumPy 可以写入的内存"file",然后将该缓冲区放入 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)

关于python - 将 ndarray 字符串转换为 ndarray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55220543/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com