Мне нужно сохранить некоторые массивы с помощью numpy, чтобы позже их читать с помощью Android Java APP и другого приложения python с использованием numpy. До сих пор я использовал numpy.ndarray.tofile и numpy.ndarray.fromfile для io, оба из которых мне очень нравятся из-за простоты обоих. Мой гуманным для написания и чтения таких двоичных массивов были:Безопасный способ сохранения двоичного файла с numpy для чтения
def write_feature_bin_file(filepath, features_list):
if os.path.isfile(filepath):
os.remove(filepath)
allfeatures = numpy.vstack(features_list)
header = [allfeatures.shape[0]]
try:
header.append(allfeatures.shape[1])
except Exception as e:
header.append(1)
if allfeatures.dtype.name == 'uint8':
header.append(0)
else:
header.append(5)
header = numpy.array(header, dtype=numpy.int32)
try:
binf = open(filepath, 'a')
header.tofile(binf)
allfeatures.tofile(binf)
binf.close()
except Exception as e:
print "Unable to save file: ", filepath
print e
return
и
def read_feature_bin_file(filepath):
try:
binf = open(filepath, 'r')
header = numpy.fromfile(f, count=3, dtype=numpy.int32)
print header
rows = header[0]
cols = header[1]
dt = header[2]
if dt == 0:
features = numpy.fromfile(f, dtype=numpy.uint8)
else:
features = numpy.fromfile(f, dtype=numpy.float32)
features.resize(rows, cols)
binf.close()
return features
except Exception as e:
print "Unable to read file: ", filepath
print e
return None
Что я делаю здесь просто написать небольшой заголовок в выходном файл, содержащий три целых числа, описывающее количество строк , количество столбцов и тип данных, которые могут быть либо uint8, либо float32, а затем добавление остальной части моих данных в файл. При чтении я читаю первые три элемента заголовка, чтобы проверить свойства массива, а затем прочитать оставшиеся файлы. Проблема в том, что я не знаю, насколько это безопасно, особенно в отношении сущности системы, которая будет читать этот файл.
Что было бы лучшим способом обеспечить, чтобы этот файл мог быть правильно прочитан в любой системе? Я знаю, что numpy имеет функции «сохранить» и «загрузить», как сохраненные в формате .npz, так и .npy, но я не знаю, как их перенести в мое приложение для Android.
Хорошо попробуйте. Вы быстро узнаете, может ли ваше приложение Android правильно его прочитать. И что такое numpy? – greenapps
Формат сортировки должен быть портативным. Документы находятся на https://docs.python.org/2/library/pickle.html и https://docs.python.org/3.1/library/pickle.html. –