Python 储蓄及;从字符串中检索Numpy数组

Python 储蓄及;从字符串中检索Numpy数组,python,numpy,Python,Numpy,我想将多维Numpy数组转换为字符串,然后再将该字符串转换回等效的Numpy数组 我不想将Numpy数组保存到文件中(例如,通过savetxt和loadtxt界面) 这可能吗?您可以使用和: 请注意,tostring返回的字符串既不保存数据类型,也不保存原始数组的形状。你必须自己重新供应 另一个选项是使用或写入io.BytesIO对象(而不是文件): 字符串由 content = output.getvalue() 给定字符串,可以使用np将其加载回数组中。load: data = np.l

我想将多维Numpy数组转换为字符串,然后再将该字符串转换回等效的Numpy数组

我不想将Numpy数组保存到文件中(例如,通过
savetxt
loadtxt
界面)

这可能吗?

您可以使用和:

请注意,
tostring
返回的字符串既不保存数据类型,也不保存原始数组的形状。你必须自己重新供应


另一个选项是使用或写入
io.BytesIO
对象(而不是文件):

字符串由

content = output.getvalue()
给定字符串,可以使用
np将其加载回数组中。load

data = np.load(io.BytesIO(content))
x = data['x']
此方法还存储数据类型和形状

对于大型数组,
np.savez_compressed
将为您提供最小的字符串


类似地,您可以使用and
np.loadtxt

import numpy as np
import io

x = np.arange(12).reshape(3,4)
output = io.BytesIO()
np.savetxt(output, x)
content = output.getvalue()
# '0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00\n4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00 7.000000000000000000e+00\n8.000000000000000000e+00 9.000000000000000000e+00 1.000000000000000000e+01 1.100000000000000000e+01\n'

x = np.loadtxt(io.BytesIO(content))
print(x)

总结:

  • tostring
    将底层数据作为字符串提供,不包含数据类型或字符串 形状
  • save
    tostring
    类似,只是它还保存数据类型和形状(.npy格式)
  • savez
    以npz格式保存数组(未压缩)
  • savez_compressed
    以压缩的npz格式保存数组
  • savetxt
    以人类可读的格式格式化数组

如果还想保存
dtype
,还可以使用python中的
pickle
模块

import pickle
import numpy as np

a = np.ones(4)
string = pickle.dumps(a)
pickle.loads(string)

从图像(
ndarray
)中提取芯片a.k.a面区域(
ndarray
)后,我使用csv.writer()将其保存为csv文件中的一列。此芯片已存储为一个字符串,其
dtype
未知。现在,我正在尝试读取该字符串并转换为numpy数组,以便使用cv2.imwrite()将芯片保存到磁盘。有办法吗?
import numpy as np
import io

x = np.arange(12).reshape(3,4)
output = io.BytesIO()
np.savetxt(output, x)
content = output.getvalue()
# '0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00\n4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00 7.000000000000000000e+00\n8.000000000000000000e+00 9.000000000000000000e+00 1.000000000000000000e+01 1.100000000000000000e+01\n'

x = np.loadtxt(io.BytesIO(content))
print(x)
import pickle
import numpy as np

a = np.ones(4)
string = pickle.dumps(a)
pickle.loads(string)