1

我正在尝试创建一个数组dtype='U'并使用 保存它numpy.save(),但是,当尝试将保存的文件加载到 a 时,numpy.memmap我收到与大小不是“U3”的倍数有关的错误

我正在与python 3.5.2. 我尝试了以下代码,其中创建了一个空数组和另一个包含 3 个条目的数组,所有条目的长度均为 3 个字母,然后将数组保存到file1.npy文件中。

import numpy as np
arr = np.empty((1, 0), dtype='U')
arr2 = np.array(['111', '222', '333'], dtype='U')
arr = np.concatenate((arr, arr2), axis = None)
print(arr)
np.save('file1', arr)

rArr = np.memmap('file1.npy', dtype='U3', mode='r')

但是,当我尝试将文件加载到 a中时numpy.memmap,出现以下错误ValueError: Size of available data is not a multiple of the data-type size.

有没有办法将数据加载到numpy.memmap使用字符串中?我觉得我错过了一些简单的东西。

4

2 回答 2

2

使用的文件numpy.memmap是原始二进制文件,而不是NPY 格式的文件。如果要读取内存映射的 NPY 文件,numpy.load请与参数一起使用mmap_mode='r'(或任何其他合适的值)。

在像你一样创建'file1.npy'之后,它是如何进行内存映射的numpy.load

In [16]: a = np.load('file1.npy', mmap_mode='r')                                                                       

In [17]: a                                                                                                             
Out[17]: memmap(['111', '222', '333'], dtype='<U3')
于 2019-05-15T07:28:25.420 回答
0

看起来np.load你的朋友在这里。

文档

问题

以下代码段对我有用:

rArr = np.load('file1.npy', mmap_mode='r')
于 2019-05-15T07:31:34.190 回答