Java等效于Numpy多维对象

时间:2011-12-04 13:17:32

标签: java multidimensional-array numpy

使用它一段时间后,我真的很喜欢Numpy多维数组。使用简洁但可读且相当通用的代码编写算法是有帮助的。我希望在Java中有同样的东西。在用自己的类似Numpy的API编写多维数组之前,有这样的事情吗?

[PS]我搜了一下,没看到

10 个答案:

答案 0 :(得分:14)

OP来自2011年。因此,截至2015年底,我想提一下,镇上有一个新的孩子,声称对于java来说是个笨蛋 - > nd4j。好消息是nd4j是一个在blas等不同库之上的抽象层。根据矩阵的大小,有两个基础实现,如{numpy或jblas fast。而且你的代码是真正独立于平台的。

答案 1 :(得分:4)

所以最接近的比赛似乎是柯尔特! http://acs.lbl.gov/software/colt/

它具有多维数组对象,数组视图和通常的线性代数!它看起来效率很高。

答案 2 :(得分:3)

Vectorz https://github.com/mikera/vectorz)提供功能齐全的NDArray,其功能与Numpy的NDArray大致相同,即它提供了更丰富的功能:

  • 任意 N维数组的数值(在本例中为Java双打)
  • 使用跨步访问进行有效切片的轻量级视图
  • 广泛的数学操作,具有高效的实施

它也非常快:对于大多数操作来说它比NumPy快得多,尽管NumPy对于某些大型矩阵操作可能仍然更快,因为它使用原生BLAS库来加速这些操作。

这是NDArray类本身:

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

免责声明:我是Vectorz的作者

答案 3 :(得分:2)

您可以将数值库用于线性代数;那些将有矩阵。看看Apache Commons Math

答案 4 :(得分:2)

Scala拥有更多类似numpy的库,如果重要的话。 (你甚至可以从Java中使用它们。)

BIDMat承诺既强大又快速(并且由GPU驱动)。

如前所述,还有Breeze

答案 5 :(得分:1)

另一个很好的选择是使用Spark的DataFrame API。

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

这为您提供了一个Pandas / Numpy类似Java接口的接口。此外,代码本质上是可并行化的,如果数据量增加,可以在一组机器上运行。

答案 6 :(得分:1)

Java 对 nd 数组来说相当笨拙(没有运算符重载等)。如果 Kotlin 没问题,你可以试试 Kotlin-NumPy (https://github.com/Kotlin/kotlin-numpy)

nd4j (https://github.com/deeplearning4j/nd4j) 前段时间很流行,但现在似乎没有维护。

答案 7 :(得分:1)

这是一个老问题,但我只是想我会添加这两个 Java ndarray 库:

答案 8 :(得分:0)

我会说java没有什么'喜欢'numpy。 numpy是一个大型的数学导向项目,它并不真正适合java心态。

并不认为java中没有好的集合库! Guava有Table接口,有两个很好的实现,ArrayTableHashBasedTable。它更像是一个数学工具的集合库,但它非常有用。

对于速度和内存效率,strre是trove。一个使用基元的集合库。

对于maticies操作,JAMA似乎很好。

据我所知,你需要编写更多代码并在java中使用更多的库而不是python。

答案 9 :(得分:0)

我推荐 la4j,一个优雅的现代线性代数库,或者 JBLAS,另一个将 BLAS 移植到 Java 的库。