Есть ли способ загрузить массив NumPy Unicode в memmap? - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь создать массив dtype='U' и сохраняю его, используя numpy.save(), однако при попытке загрузить сохраненный файл в numpy.memmap я получаю ошибку, связанную с размером, не кратным ' У3'

Я работаю с 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 голосов
/ 15 мая 2019

Похоже, np.load ваш друг здесь.

Документ

Проблема

Следующий фрагмент кода работает дляя:

rArr = np.load('file1.npy', mmap_mode='r')
0 голосов
/ 15 мая 2019

Файлы, используемые numpy.memmap, являются необработанными двоичными файлами, а не файлами формата NPY .Если вы хотите прочитать файл 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')
...