у меня есть NumPy ndarray
держа numpy.float64
данные хранятся в файле в двоичном формате с использованием cPickle-х dump()
метод.
from cPickle import dump, HIGHEST_PROTOCOL
with open(filePath, 'wb') as f:
dump(numpyArray, f, protocol=HIGHEST_PROTOCOL)
На момент написания этой статьи HIGHEST_PROTOCOL
использует cPickle’s версия протокола 2 но, похоже, не так много документации о том, как именно работает этот протокол.
Что я пытаюсь сделать, это прочитать этот файл и создать cv::Mat
объект (посмотреть здесь) с данными, что оказывается довольно сложно сделать.
На данный момент, я надеюсь, что все заработает как можно быстрее, и я не слишком беспокоюсь о производительности, объеме памяти и эффективности. Однако эти факторы могут стать важными позже.
Таким образом, мой вопрос заключается в том, как проще всего преобразовать данные в этом файле в cv::Mat
объект? Если вы думаете, что самый простой способ не обязательно самый эффективный, я бы тоже хотел услышать ваши мысли по этому поводу. Обратите внимание, что я открыт для использования другого формата хранения, возможно, просто текстового файла, если это облегчит взаимодействие между Python и C ++.
Я должен хранить numpy
массив на диск, потому что мне нужно иметь возможность открывать и читать этот файл на мобильном устройстве (iOS и Android), и использование сетевого вызова для получения данных на самом деле не находится на столе в данный момент.
Pickle, вероятно, не удобный способ переноса данных на языки, отличные от Python.
На самом деле, я бы сказал, что Pickle совсем не подходит для хранения данных, так как:
Нельзя сказать, что он не имеет его использования: он удобен для таких вещей, как кэш, личные сценарии или передача данных между процессами.
Другие могут не согласиться с этим мнением.
Так что вы могли бы использовать? Вот несколько идей:
tofile
, Это, вероятно, способ пойти на скорость и размер, и не очень сложно нагрузка.savetxt
,tolist()
а также dumps
, Это будет медленно и приведет к большим файлам, но будет переносимым и будет работать для любого измерения и даже для неравных длин строк / столбцов.Еще немного просто для удовольствия:
РЕДАКТИРОВАТЬ: вот эталон для разных методов: