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