k = np.array([[[0.09898942, 0.22804536],[0.06109612, 0.19022354],[0.93369348, 0.53521671],[0.64630094, 0.28553219]],[[0.94503154, 0.82639528],[0.07503319, 0.80149062],[0.1234832 , 0.44657691],[0.7781163 , 0.63538195]]])
d = dict(enumerate(k.flatten(), 1))
d = str(d) ## dump as string (pickle and other packages parse the dump as bytes)
m = ast.literal_eval(d) ### convert the dict as str to dict
m = np.fromiter(m.values(), dtype=float) ## convert m to nparray
4条答案
按热度按时间ncecgwcz1#
您可以使用np.tostring和np.fromstring:
注意
tostring
返回的字符串并不保存dtype和原始数组的形状,你必须自己重新提供。另一个选项是使用np.save、np.savez或np.savez_compressed写入
io.BytesIO
对象(而不是文件):字符串由下式给出
给定字符串,可以使用
np.load
将其加载回数组:这个方法也存储dtype和shape。
对于大型数组,
np.savez_compressed
将提供最小的字符串。类似地,您可以使用np.savetxt和
np.loadtxt
:总结:
tostring
以字符串的形式提供基础数据,没有dtype或shapesave
与tostring
类似,不同之处在于它还保存dtype和shape(. npy格式)savez
以npz格式保存数组(未压缩)savez_compressed
以压缩npz格式保存数组savetxt
将数组格式化为可读格式4xy9mtcn2#
如果你也想保存
dtype
,你也可以使用python的pickle
模块。rdlzhqv93#
np.tostring和np.fromstring不再起作用。它们使用np.tobyte,但是它将np.array解析为字节而不是字符串。要做到这一点,请使用ast.literal_eval。
如果列表的元素是2D浮点型,那么ast.literal_eval()在检索时不能处理嵌套列表的列表的列表的很多非常复杂的列表。
因此,最好将list的list解析为dict并转储字符串。
当装入一个保存的转储时,ast.literal_eval()以一种更好的方式将dict作为字符串处理。将字符串转换为dict然后将dict转换为列表的列表
ui7jx7zq4#
我使用JSON来实现这一点:
1.编码为JSON
第一步是将其编码为JSON:
结果是:
2.解码回Numpy
要将其转换回numpy数组,可以用途:
它给予你:
我喜欢这种方法,因为字符串很容易读取,尽管在这种情况下不需要将其存储在文件或其他文件中,但使用这种格式也可以做到这一点。