ti-enxame.com

Java equivalente para o objeto multidimensional Numpy

Depois de usá-lo por um tempo, eu realmente gosto do array multidimensional Numpy. É útil escrever algoritmos com um código conciso, mas legível e bastante geral. Desejo ter a mesma coisa em Java. Antes de codificar um array multidimensional com uma API do tipo Numpy, já existe tal coisa?

[PS] Procurei um pouco, não vi

18
Monkey

Portanto, o par mais próximo parece ser o Colt! http://acs.lbl.gov/software/colt/

Ele apresenta um objeto de matriz multidimensional, visualizações sobre uma matriz e sua álgebra linear usual! E parece ser bastante eficiente.

3
Monkey

O OP é de 2011. Portanto, no final de 2015, gostaria de mencionar que há um novo garoto na cidade que afirma ser entorpecido para Java -> nd4j . O bom é que nd4j é uma camada de abstração no topo de diferentes bibliotecas, como blas. Dependendo do tamanho de suas matrizes, há implementações subjacentes duas vezes mais rápido como numpy ou jblas. E seu código é real plataforma independente.

21
KIC

A biblioteca Vectorz ( https://github.com/mikera/vectorz ) oferece um NDArray completo que é amplamente equivalente em funcionalidade para NDArray da Numpy, ou seja, oferece os recursos completos:

  • Arbitrário Matrizes N-dimensionais de valores numéricos (neste caso, Java duplica)
  • Visualizações leves usando acesso amplo para um fatiamento eficiente
  • Uma ampla gama de operações matemáticas com implementações eficientes

Também é muito rápido: é muito mais rápido que o NumPy para a maioria das operações, embora o NumPy possa ainda ser mais rápido para certas operações de matriz grande porque usa as bibliotecas BLAS nativas para acelerá-las.

Esta é a própria classe NDArray:

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

Isenção de responsabilidade : Sou o autor de Vectorz

5
mikera

Você pode usar bibliotecas numéricas para álgebra linear; aqueles terão matrizes neles. Dê uma olhada em Apache Commons Math .

2
duffymo

Scala tem um número maior de bibliotecas do tipo numpy, se isso conta. (Você deve até mesmo ser capaz de usá-los em Java.)

BIDMat promete ser poderoso e rápido (e com GPU).

Como já mencionado, existe também Breeze

2
Aleksandr Dubinsky

Outra ótima opção é usar a API DataFrame do Spark.

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

Isso fornece uma interface semelhante ao Pandas/Numpy para matrizes em Java. Além disso, o código é inerentemente paralelizável e pode ser executado em um cluster de máquinas se o tamanho dos dados aumentar.

1
Asim Jalis

Eu diria que Java não tem nada 'como' numpy. Numpy é um grande projeto orientado para a matemática que realmente não se encaixa na mentalidade Java.

Isso não significa que não há boas bibliotecas de coleção em Java! Guava tem a interface Tabela com duas boas implementações, ArrayTable e HashBasedTable . É mais uma biblioteca de coleção do que uma ferramenta matemática, mas é muito útil.

Para velocidade e eficiência de memória, threre é trove . Uma biblioteca de coleção que funciona com primitivos.

Para operações maticies, JAMA parece bom.

Pelo que eu sei, você precisará codificar mais e usar mais biblioteca em Java do que python.

0
user983716