有没有办法将一个numpy unicode数组加载到memmap中?

时间:2019-05-15 06:58:23

标签: python numpy numpy-ndarray numpy-memmap

我试图创建一个dtype='U'数组并使用numpy.save()保存它,但是,当试图将保存的文件加载到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')

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

是否可以使用字符串将数据加载到numpy.memmap中?我觉得我缺少一些简单的东西。

2 个答案:

答案 0 :(得分:0)

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

像您一样创建'file1.py'之后,可以使用numpy.load将其映射到存储器:

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

In [17]: a                                                                                                             
Out[17]: memmap(['111', '222', '333'], dtype='<U3')

答案 1 :(得分:0)

好像np.load是您的朋友在这里。

Doc

Issue

以下代码段对我有用:

rArr = np.load('file1.npy', mmap_mode='r')