Java-эквивалент для многомерного объекта Numpy - PullRequest
15 голосов
/ 04 декабря 2011

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

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

Ответы [ 7 ]

16 голосов
/ 13 ноября 2015

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

4 голосов
/ 18 декабря 2013

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

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

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

Вот сам класс NDArray:

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

Отказ от ответственности : я автор Vectorz

4 голосов
/ 07 декабря 2011

Так что ближайший матч, кажется, Кольт! http://acs.lbl.gov/software/colt/

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

2 голосов
/ 13 июля 2015

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

BIDMat обещает быть одновременно мощным и быстрым (и с графическим процессором).

Как уже упоминалось, есть также Бриз

2 голосов
/ 04 декабря 2011

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

1 голос
/ 27 ноября 2016

Еще одним отличным вариантом является использование API Spark DataFrame.

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

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

0 голосов
/ 06 декабря 2011

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

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

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

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

Насколько я знаю, вам нужно будет больше кодировать и использовать большеБиблиотека в Java, чем Python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...