Эквивалент Java для многомерного объекта Numpy

После использования этого на некоторое время мне очень нравится многомерный массив Numpy. Полезно писать алгоритмы с кратким, но читаемым и довольно общим кодом. Я хочу иметь то же самое в Java. Перед тем, как сам кодировать многомерный массив с похожим на Numpy API, есть ли такая вещь уже?

[PS] Я немного искал, не видел

Ответ 1

Итак, ближайший матч, похоже, Colt! http://acs.lbl.gov/software/colt/

Он содержит многомерный объект массива, представления по массиву и вашу обычную линейную алгебру! И это кажется довольно эффективным.

Ответ 2

OP с 2011 года. Итак, по состоянию на конец 2015 года я хотел бы упомянуть, что в городе появился новый ребенок, который утверждает, что он бесчисленный для java → nd4j. Самое приятное, что nd4j - это слой абстракции поверх различных библиотек, таких как blas. В зависимости от размера ваших матриц существуют базовые реализации в два раза: fast как numpy или jblas. И ваш код не зависит от платформы.

Ответ 3

Библиотека Vectorz (https://github.com/mikera/vectorz) предлагает полнофункциональный NDArray, который в целом эквивалентен функциональности Numpy NDArray, то есть он предлагает следующие функции:

  • Произвольные N-мерные массивы числовых значений (в этом случае Java удваивается)
  • Легкие виды с использованием strided access для эффективной нарезки
  • Широкий спектр математических операций с эффективными реализациями

Он также очень быстрый: он намного быстрее, чем NumPy для большинства операций, хотя NumPy может быть быстрее для некоторых крупных матричных операций, потому что он использует собственные библиотеки BLAS, чтобы ускорить их.

Здесь сам класс NDArray:

https://github.com/mikera/vectorz/blob/develop/src/main/java/mikera/arrayz/NDArray.java

Отказ от ответственности. Я автор Vectorz

Ответ 4

Scala имеет более широкое число numpy-подобных библиотек, если это так. (Вы даже можете использовать их с Java.)

BIDMat promises как мощный, так и быстрый (и работающий на GPU).

Как уже упоминалось, существует также Breeze

Ответ 5

Вы можете использовать числовые библиотеки для линейной алгебры; у них будут матрицы в них. Посмотрите Apache Commons Math.

Ответ 6

Еще один замечательный вариант - использовать API-интерфейс Sparks DataFrame.

http://spark.apache.org/docs/latest/sql-programming-guide.html

Это дает вам интерфейс Pandas/Numpy для массивов на Java. Кроме того, код по своей сути является параллелизуемым и может выполняться на кластере машин, если размер ваших данных увеличивается.

Ответ 7

Я бы сказал, что java не имеет ничего общего с numpy. numpy - большой математически ориентированный проект, который не очень подходит в менталитете Java.

Это не значит, что в java нет библиотек коллекции! В Guava есть Таблица интерфейс с двумя хорошими реализациями, ArrayTable и HashBasedTable. Это больше библиотека коллекции, которая является математическим инструментом, но она очень полезна.

Для скорости и эффективности памяти threre trove. Библиотека коллекций, которая работает с примитивами.

Для операций maticies JAMA кажется хорошим.

Насколько мне известно, вам нужно будет больше кода и использовать больше библиотеки в java, чем python.