Сохранение массивов в виде словаря - PullRequest
0 голосов
/ 24 мая 2018

Я сохраняю 2 массива Numpy как словарь.
Когда я загружаю данные из двоичного файла, я получаю еще один ndarray.Могу ли я использовать загруженный массив Numpy в качестве словаря?Вот мой код и вывод моего скрипта:

import numpy as np

x = np.arange(10)
y = np.array([100, 101, 102, 103, 104, 105, 106, 107])
z = {'X': x, 'Y': y}
np.save('./data.npy', z)
z1 = np.load('./data.npy')
print(type(z1))
print(z1)
print(z1['X']) #this line will generate an error

Вывод: {'X': массив ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), 'Y': массив ([100, 101, 102, 103, 104, 105, 106, 107])}

Ответы [ 3 ]

0 голосов
/ 24 мая 2018

Другой вариант для доступа к данным из z1 должен быть:

z1.flatten()[0]['X']
0 голосов
/ 24 мая 2018

Альтернативным и недостаточно используемым способом хранения массивов numpy является HDF5.Преимущества:

  • Транспортабельность, то есть не специфичная для Python, например pickle
  • Возможность доступа к данным вне памяти и возможности разбиения на фрагменты для оптимизации
  • Параметры сжатия для оптимизации производительности чтения или записи

Вот демонстрационная версия:

import h5py, numpy as np

x = np.arange(10)
y = np.array([100, 101, 102, 103, 104, 105, 106, 107])
z = {'X': x, 'Y': y}

with h5py.File('file.h5', 'w', libver='latest') as f:  # use 'latest' for performance
    for k, v in z.items():
        f.create_dataset('dict/'+str(k), data=v)

with h5py.File('file.h5', 'r', libver='latest') as f:
    x_read = f['dict']['X'][:]  # [:] syntax extracts numpy array into memory
    y_read = f['dict']['Y'][:]

print(x_read)

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
0 голосов
/ 24 мая 2018

Да, вы можете получить доступ к базовому словарю в 0-мерном массиве.Попробуйте z1[()].

Вот демоверсия:

np.save('./data.npy', z)
d = np.load('./data.npy')[()]

print(type(d))
<class 'dict'>

print(d['X'])
[0 1 2 3 4 5 6 7 8 9]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...