Human Readable Option
Предполагая, что вы хотите, чтобы данные были удобочитаемыми, сохранение данных требует немного больше работы. Мой поиск показал мне, что существует это решение для сохранения 3D-данных в текстовый файл. Однако довольно просто расширить этот пример до 4D для вашего варианта использования. Этот код взят и адаптирован из этого поста, спасибо Джо Кингтону и Дэвиду Чунгу.
import numpy as np
data = np.arange(2*3*4*5).reshape((2,3,4,5))
with open('test.csv', 'w') as outfile:
# We write this header for readable, the pound symbol
# will cause numpy to ignore it
outfile.write('# Array shape: {0}\n'.format(data.shape))
# Iterating through a ndimensional array produces slices along
# the last axis. This is equivalent to data[i,:,:] in this case.
# Because we are dealing with 4D data instead of 3D data,
# we need to add another for loop that's nested inside of the
# previous one.
for threeD_data_slice in data:
for twoD_data_slice in threeD_data_slice:
# The formatting string indicates that I'm writing out
# the values in left-justified columns 7 characters in width
# with 2 decimal places.
np.savetxt(outfile, twoD_data_slice, fmt='%-7.2f')
# Writing out a break to indicate different slices...
outfile.write('# New slice\n')
И затем, как только данные были сохранены, все, что вам нужно сделать, это загрузить их и изменить их форму (np.load()
) по умолчанию будет считывать данные как 2D-массив, но np.reshape()
позволит нам восстановить структуру. Опять же, этот код адаптирован из предыдущего сообщения.
new_data = np.loadtxt('test.csv')
# Note that this returned a 2D array!
print(new_data.shape)
# However, going back to 3D is easy if we know the
# original shape of the array
new_data = new_data.reshape((2,3,4,5))
# Just to check that they're the same...
assert np.all(new_data == data)
Двоичный вариант
Предполагая, что удобочитаемость человека не требуется, я бы рекомендовал использовать встроенный *.npy
формат, который описан здесь . Это сохраняет данные в двоичном формате.
Вы можете сохранить массив, выполнив np.save('NAME_OF_ARRAY.npy', ARRAY_TO_BE_SAVED)
, а затем загрузить его с помощью SAVED_ARRAY = np.load('NAME_OF_ARRAY.npy')
.
Вы также можете сохранить несколько массивов numpy в один zip-файл с функцией np.savez()
, например, np.savez('MANY_ARRAYS.npz', ARRAY_ONE, ARRAY_TWO)
. И вы загружаете заархивированные массивы аналогичным образом SEVERAL_ARRAYS = np.load('MANY_ARRAYS.npz')
.