Odpowiednik Java dla wielowymiarowego obiektu Numpy

Po dłuższym użytkowaniu bardzo podoba mi się Wielowymiarowa tablica Numpy. Pomocne jest pisanie algorytmów o zwięzłym, ale czytelnym i dość ogólnym kodzie. Chciałbym mieć to samo w Javie. Przed samym zakodowaniem wielowymiarowej tablicy z API podobnym do Numpy, czy istnieje już coś takiego ?

[PS] Szukałem trochę, nie widziałem

Author: Monkey, 2011-12-04

7 answers

OP jest z 2011 roku. Tak więc pod koniec 2015 roku chciałbym wspomnieć, że jest nowy dzieciak w mieście, który twierdzi, że jest numpy dla java - > nd4j. Fajne jest to, że nd4j jest warstwą abstrakcji na różnych bibliotekach, takich jak blas. W zależności od wielkości macierzy istnieją implementacje dwa razy większe niż fast Jak numpy lub jblas. Twój kod jest niezależny od platformy.

 22
Author: KIC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-23 14:25:31

Biblioteka Vectorz (https://github.com/mikera/vectorz) oferuje w pełni funkcjonalny NDArray, który jest zasadniczo równoważny pod względem funkcjonalności do Ndarray Numpy, tzn. oferuje pełne funkcje:

  • dowolne tablice N-wymiarowe wartości liczbowych (w tym przypadku Java podwaja)
  • lekkie widoki za pomocą strided access do efektywnego krojenia
  • szeroki zakres operacji matematycznych z effiecient implementacje

Jest również bardzo szybki: jest znacznie szybszy niż NumPy dla większości operacji, chociaż NumPy może być szybszy dla niektórych dużych operacji macierzowych, ponieważ używa natywnych bibliotek BLAS do ich przyspieszenia.

Oto sama klasa NDArray:

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

Disclaimer: Jestem autorem Vectorz

 7
Author: mikera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-18 14:55:58

Więc najbliższy mecz wydaje się być Colt ! http://acs.lbl.gov/software/colt/

Zawiera wielowymiarowy obiekt tablicy, widoki na tablicę i zwykłą algebrę liniową ! I wydaje się być raczej wydajny.

 3
Author: Monkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-06 21:06:58

Możesz używać bibliotek numerycznych do algebry liniowej; te będą miały w sobie Matry. Spójrz na Apache Commons Math.

 2
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-04 13:27:11

Scala ma szerszą liczbę bibliotek podobnych do numpy, jeśli to się liczy. (Powinieneś być nawet w stanie używać ich z Javy.)

BIDMat zapowiada się zarówno wydajny, jak i szybki (i zasilany przez GPU).

Jak już wspomniano, istnieje również

 2
Author: Aleksandr Dubinsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-13 01:24:20

Kolejną świetną opcją jest użycie Spark DataFrame API.

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

Daje to interfejs Typu Pandy / Numpy do tablic w Javie. Dodatkowo kod jest z natury równoległy i może być uruchamiany na klastrze maszyn, jeśli rozmiar danych wzrośnie.

 0
Author: Asim Jalis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-26 22:54:35

Powiedziałbym, że java nie ma nic takiego jak numpy. numpy jest dużym matematycznie zorientowanym projektem, który tak naprawdę nie pasuje do mentalności Javy.

To nie znaczy, że nie ma dobrych bibliotek kolekcji w Javie! Guava posiada interfejs Table z dwoma dobrymi implementacjami, ArrayTable i HashBasedTable . To bardziej biblioteka kolekcji niż narzędzie matematyczne, ale jest bardzo przydatna.

Dla szybkości i wydajności pamięci, there is trove . Biblioteka kolekcji pracująca z prymitywami.

W przypadku operacji maticies, JAMA wydaje się być dobra.

Z tego co wiem, będziesz musiał więcej kodować i używać więcej bibliotek w Javie niż python.

 -2
Author: user983716,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-06 16:21:20