ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 从字符串保存和检索Numpy数组

2019-07-15 10:56:59  阅读:165  来源: 互联网

标签:python numpy


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

我不想将Numpy数组保存到文件中(例如通过savetxt和loadtxt接口).

这可能吗?

解决方法:

您可以使用np.tostringnp.fromstring

In [138]: x = np.arange(12).reshape(3,4)

In [139]: x.tostring()
Out[139]: '\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\t\x00\x00\x00\n\x00\x00\x00\x0b\x00\x00\x00'

In [140]: np.fromstring(x.tostring(), dtype=x.dtype).reshape(x.shape)
Out[140]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

请注意,tostring返回的字符串不保存dtype,也不保存原始数组的形状.你必须自己重新供应这些.

另一种选择是使用np.savenp.saveznp.savez_compressed写入io.BytesIO对象(而不是文件):

import numpy as np
import io

x = np.arange(12).reshape(3,4)
output = io.BytesIO()
np.savez(output, x=x)

字符串由.给出

content = output.getvalue()

给定字符串,您可以使用np.load将其加载回数组:

data = np.load(io.BytesIO(content))
x = data['x']

此方法也存储dtype和形状.

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

同样,您可以使用np.savetxt和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以字符串形式提供基础数据,没有dtype或
形状
> save就像tostring,除了它还保存了dtype和shape(.npy格式)
> savez以npz格式保存数组(未压缩)
> savez_compressed以压缩的npz格式保存数组
> savetxt以人类可读的格式格式化数组

标签:python,numpy
来源: https://codeday.me/bug/20190715/1466922.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有