Передаешь миллион чисел из Java в Matlab? - PullRequest
3 голосов
/ 02 февраля 2009

У меня есть немного кода, который работает за 10,919 с. Профилирование показывает, что 10,182 с потрачены впустую в

opaque.double

Который вызывается, когда я использую

jClass.GetArrays(jArray1,jArray2);

struct.prop1 = double(jArray1);
struct.prop2 = double(jArray1);

Что можно сделать? Я должен использовать Java для взаимодействия с внешним API.


РЕДАКТИРОВАТЬ: я использовал следующий хак:

struct.prop1 = cell2mat( cell( jArray1) ); 


И опустился до 1,5 с / 2,2 с

РЕДАКТИРОВАТЬ:

Заставить Java возвращать строковое представление массивов с разделителями-запятыми, а затем использовать

data = strread(char(jString),'%f','delimiter',',' );

Производительность почти сносная

Ответы [ 2 ]

3 голосов
/ 12 февраля 2009

Проблема заключается в использовании штучных Java-примитивов - java.lang.Double в этом случае.

Простое изменение сигнатуры Java с Double на double приводит к тому, что Matlab без проблем работает с массивом без дополнительных затрат на приведение.

1 голос
/ 02 февраля 2009

Вы можете сохранить его в файл, а затем прочитать его на другом конце. Он также может быть таким же медленным (особенно если используется сеть), но оно того стоит.

Вы также можете рассмотреть возможность преобразования его в двоичный объект двоичных данных, затем передать его и преобразовать обратно.

У меня есть подозрение, что при такой плохой производительности каждый элемент массива передается в отдельной транзакции, а не сразу.

-Adam

...