Файл результатов загрузки Numpy сохранен в режиме добавления - PullRequest
0 голосов
/ 29 июня 2018

У меня есть один большой файл, сохраненный с использованием numpy в режиме добавления, то есть он содержит около 5000 массивов, каждый из которых имеет форму, например, [1, 224, 224, 3], вот так:

filepath = 'hello'
for some loop:
    ...
    with open(filepath, 'ab') as f:
        np.save(f, ndarray)

Мне нужно загрузить данные в файл, может быть, все массивы, или, может быть, в каком-то режиме генерации, например, чтение первых 100, затем следующих 100 и так далее. Есть ли способ сделать это правильно? Теперь я знаю только, если я использую np.load, я могу получить только один массив каждый раз, и я не знаю, как читать массивы от 100 до 199.

загрузка массивов, сохраненных с помощью numpy.save в режиме добавления Этот вопрос говорит о чем-то об этом, но, кажется, не то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Это скорее хак (учитывая вашу ситуацию).

В любом случае, вот тот, который создал файлы с помощью np.save в режиме добавления:

import numpy as np

numpy_arrays = [np.array ([1, 2, 3]), np.array([0, 9])]

print numpy_arrays[0], numpy_arrays[1]
print type(numpy_arrays[0]), type(numpy_arrays[1])
for numpy_array in numpy_arrays:
    with open ("./my-numpy-arrays.bin", 'ab') as f:
        np.save(f, numpy_array)

[1 2 3] [0 9]
<type 'numpy.ndarray'> <type 'numpy.ndarray'>

... а вот код, который проверяет IOException (и другие ошибки) во время цикла.

with open ("./my-numpy-arrays.bin", 'rb') as f:
    while True:
        try :   
            numpy_array = np.load(f)
            print numpy_array
        except : 
            break

[1 2 3]
[0 9]

Не очень красиво, но ... это работает.

0 голосов
/ 29 июня 2018

Одно из решений, хотя и некрасивое и способное получить только все массивы в файле (и, следовательно, риск ошибки из-за нехватки памяти), выглядит следующим образом:

a = []
with open(filepath, 'rb') as f:
    while True:
        try:
            a.append(np.load(f))
        except:
            break
np.stack(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...