如何将 numpy.array2string 形成的字符串转换回数组?

VIV*_*325 5 python numpy python-3.x

我有一个 numpy 数组字符串,它是通过使用转换的numpy.array2string

现在,我想要回我的 numpy 数组。

对我如何实现它有什么建议吗?

我的代码:

img = Image.open('test.png')
array = np.array(img)
print(array.shape)
array_string = np.array2string(array, precision=2, separator=',',suppress_small=True)
Run Code Online (Sandbox Code Playgroud)

PS 我的数组是3D数组而不是 1D 并且我使用,分隔符,而不是默认的空白

Ale*_*bal 5

这是一种黑客攻击,但可能是最简单的解决方案。

import numpy as np

array = np.array([[[1,2,3,4]]]) # create a 3D array
array_string = np.array2string(array, precision=2, separator=',', suppress_small=True)
print(array_string) #=> [[[1,2,3,4]]]

# Getting the array back to numpy
new_array = eval('np.array(' + array_string + ')')
Run Code Online (Sandbox Code Playgroud)

由于数组的字符串表示形式与我们传递来构建此类数组的参数相匹配,因此使用 eval 成功创建了相同的数组。

如果您将其包含在 a 中,try except以防字符串格式无效,则可能是最好的。


She*_*zod 1

更新:我刚刚尝试过这个,它对我有用:

import numpy as np
from PIL import Image

img = Image.open('2.jpg')

arr = np.array(img)

# get shape and type
array_shape = arr.shape
array_data_type = arr.dtype.name
# converting to string
array_string = arr.tostring()

# converting back to numpy array
new_arr = np.frombuffer(array_string, dtype=array_data_type).reshape(array_shape)
print(new_arr)
Run Code Online (Sandbox Code Playgroud)

为了将 numpy 数组转换为字符串,我使用arr.tostring()而不是arr.array2string(). 之后转换回 numpy 数组可以与np.frombuffer().