加载字符串的numpython数组3

2024-04-18 06:53:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在将代码从python2转换为python3。数组最初保存在python2中。作为我的一些代码的一部分,我加载了一个我保存的字符串数组。在python2中,我可以简单地将其加载为

arr = np.load("path_to_string.npy")

它给了我

arr = ['str1','str2' etc...]

然而,当我在python3中执行同样的操作时,它不起作用,我得到的是。你知道吗

arr = [b'str1',b'str2' etc...]

我认为这意味着字符串存储为不同的数据类型。我尝试使用以下方法转换它们:

 arr = [str(i) for i in arr]

但这只会加剧问题。有人能解释一下为什么会发生这种情况以及如何解决它吗?我相信这是微不足道的,但我只是画一个空白?你知道吗


Tags: topath字符串代码stringnpetcload
1条回答
网友
1楼 · 发布于 2024-04-18 06:53:54

要清楚的是,如果它们在Python 2中是str,那么Python 3中的bytes是“正确”的类型,因为它们都存储字节数据;如果您想要任意文本数据,则可以在Python 2中使用unicode。你知道吗

对于numpy,这确实是正确的行为;numpy不希望以静默方式将面向字节的数据转换为面向文本的数据(除其他问题外,这样做将使内存使用量增加4倍,因为所有Unicode字符的固定宽度表示每个字符使用4个字节)。如果您真的想从bytes更改为str,可以显式地强制转换它,尽管它有点粗糙:

>>> arr  # Original version
array([[b'abc', b'123'],
       [b'foo', b'bar']], dtype='|S3')
>>> arr = arr.astype('U')  # Cast from "[S]tring" to "[U]nicode" equivalent
>>> arr
array([['abc', '123'],
       ['foo', 'bar']], dtype='<U3')

相关问题 更多 >