Как прочитать массив numpy в ND4j

У меня тоже есть компоненты, которые работают с n-мерным массивом. Один компонент написан на python, который обрабатывает данные и сохраняет обработанный ndarray с помощью tobytes(). Теперь другой компонент написан на java, которому нужно прочитать сериализованный ndarray, созданный в первом компоненте.

Мне любопытно, существуют ли какие-либо существующие библиотеки Java, которые могут читать сериализованный массив numpy. Или есть лучший способ связи ndarray между java и python.

Любой совет приветствуется!

Благодарю вас!


person Alfred    schedule 10.10.2019    source источник


Ответы (1)


ND4J поддерживает чтение и запись в массивы Numpy. Посмотрите javadocs ND4J для xxxNpyYYYArray методы .

Он может читать и записывать из/в файлы, массивы байтов и даже необработанные указатели на массив numpy.

Методы указателей позволяют использовать массивы без копирования или сериализации. Мы используем методы указателя внутри jumpy ( который запускает Java через pyjnius) и при использовании пресета javacpp cpython/numpy для запуска интерпретатора cpython внутри процесса Java.

person wm_eddie    schedule 21.10.2019
comment
@vm_eddie спасибо, что указали на это. Итак, на стороне Python я сохраняю массив numpy с помощью np.tobytes() и кодирую его с помощью base64. Затем на стороне Java я декодирую с помощью base64 и загружаю его с помощью Nd4j.createNpyFromByteArray(). Однако я получаю Assertion failed: (littleEndian), function parseNpyHeaderStr, file /Volumes/jenkins_ws/jenkins/workspace/deeplearning4j-deeplearning4j-1.0.0-beta4-macosx-x86_64-cpu/libnd4j/include/cnpy/cnpy.cpp, line 216. Вы представляете, что это значит? - person Alfred; 23.10.2019