【发布时间】:2019-07-22 12:37:40
【问题描述】:
我正在将代码从 python 2 转换为 python 3。该数组最初保存在 python 2 中。作为我的一些代码的一部分,我加载了一个我保存的字符串数组。在 python 2 中,我可以简单地将其加载为
arr = np.load("path_to_string.npy")
它给了我
arr = ['str1','str2' etc...]
然而,当我在 python 3 中做同样的事情时,它不起作用,我反而得到了。
arr = [b'str1',b'str2' etc...]
我认为这意味着字符串存储为不同的数据类型。我尝试使用以下方法转换它们:
arr = [str(i) for i in arr]
但这只会使问题更加复杂。有人可以解释为什么会发生这种情况以及如何解决吗?我敢肯定它是微不足道的,但只是在画一个空白?
【问题讨论】:
-
由于文件是用python2保存的,所以需要使用np.load()中的'encoding'参数。阅读here
-
将编码设置为它们建议的任何值(字节、ASCII 或 latin1)会导致相同的问题。设置 fix_imports=True 也无济于事
-
你也可以[i.decode() for i in arr]。
-
是的,谢谢,这解决了!
-
@Vishal:
numpy的astype方法会更快地进行批量转换,但是可以,假设语言环境编码是合理的(或者文本是纯 ASCII 而你不是在一个真正奇怪的语言环境中),这将达到相同的结果,产生一个list而不是一个新的numpy数组。