关于python:使用numpy.load时遇到问题

Trouble using numpy.load

我有以下用python2编写的数据,我想加载到python3文件中。

1
2
3
import numpy as np
x = np.array([{'a': np.array([1., 2., 3])}])
np.save('data.npy', x)

我的第一次尝试是:

1
2
3
4
import numpy as np
x = np.load('data.npy')

UnicodeError: Unpickling a python object failed

在尝试加载原始数据之后,每当我在Python字典中的numpy数组中有numpy float时,我都会得到错误。我可以加载字典,可以加载numpy数组,甚至可以在python字典中加载numpy数组,但只要在python字典中的numpy数组中有numpy浮点数,我就会得到错误。我的第二次尝试是:

1
2
3
4
5
import numpy as np
x = np.load('data.npy', encoding = 'bytes')
x

array([{b'a': array([ 1.,  2.,  3.])}], dtype=object)

这样做的目的是我可以加载数据,但它在字典的每个键前都添加了一个"b"。我想知道是否有人知道为什么会发生这个问题以及如何解决它。

谢谢!

编辑:

似乎下面解决了这个问题:

1
2
import numpy as np
x = np.load('data.npy', encoding = 'latin1')


python2中的默认编码是ascii;python3中的默认编码是utf-8latin1ascii的超集。这就是为什么用latin1加载ascii编码的字符串会起作用,并产生与用ascii加载相同的结果。