使用 numpy.load 时遇到问题

Posted

技术标签:

【中文标题】使用 numpy.load 时遇到问题【英文标题】:Trouble using numpy.load 【发布时间】:2016-11-13 22:50:51 【问题描述】:

我有以下用 python 2 编写的数据,我想加载到 python 3 文件中。

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

我的第一次尝试是这样的:

import numpy as np
x = np.load('data.npy')

UnicodeError: Unpickling a python object failed

在玩弄了我尝试加载的原始数据之后,似乎每当我在 python 字典中的 numpy 数组中有一个 numpy 浮点数时,我都会收到错误消息。我可以加载字典,可以加载 numpy 数组,甚至可以在 python 字典中加载 numpy 数组,但是一旦我在 python 字典中的 numpy 数组内有 numpy 浮点数,我就会收到错误消息。我的第二次尝试是这样的:

import numpy as np
x = np.load('data.npy', encoding = 'bytes')
x

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

这样我可以加载数据,但它在字典中的每个键前面添加了一个“b”。我想知道是否有人对为什么会出现这个问题以及如何解决它有任何见解。

谢谢!

编辑:

似乎以下解决了问题:

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

【问题讨论】:

b 并不是键的一部分。它表示该字符串是一个字节串。所以 b'a' 是一个字符串,其中一个字节代表字母 a。这类似于 unicode 字符串,至少在 python 2.x 中看起来像 u'a' 有一条评论(我猜它被删除了?)建议尝试 encoding = 'str' 而不是 encoding = 'bytes'。 Encoding = 'str' 无效,但 encoding = 'latin1' 似乎有效。 【参考方案1】:

Python 2 中的默认编码是ascii;在 Python 3 中是utf-8latin1(又名 ISO-8859-1)是 ascii 的超集。这就是为什么使用latin1 加载ascii 编码的字符串的原因与使用ascii 加载它的结果相同。

【讨论】:

编码的默认值为'ASCII',我第一次尝试。但是将编码设置为“latin1”是可行的

以上是关于使用 numpy.load 时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

numpy.load 给出 ValueError: descr is not a valid dtype 描述符:

切片numpy加载文件如何加载到内存中

ARPU及其计算方式

在磁盘上保留 numpy 数组的最佳方法

Vue3使用时遇到的问题

numpy 保存/加载损坏数组