Java等效于Numpy多维对象

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

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

OP是从2011年开始的。因此,到2015年底,我想提一下,镇上有一个新的孩子,声称自己是java – > nd4j 。 好消息是nd4j是一个在blas等不同库之上的抽象层。 根据矩阵的大小,底层实现的速度是numpy或jblas的两倍。 而且您的代码是真正独立于平台的。

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

它具有多维数组对象,数组视图和通常的线性代数! 它似乎相当有效。

图书馆Vectorzhttps://github.com/mikera/vectorz )提供function齐全的NDArray,其function与Numpy的NDArray大致相同,即它提供了以下function:

  • 任意N维数值数组 (在本例中为Java双精度数)
  • 使用跨步访问的轻量级视图实现高效切片
  • 广泛的数学运算和高效的实施

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

这是NDArray类本身:

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

免责声明 :我是Vectorz的作者

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

BIDMat承诺既强大又快速(并且支持GPU)。

如前所述,还有Breeze

您可以将数值库用于线性代数; 那些将有他们的基质。 看看Apache Commons Math 。

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

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

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

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

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

对于速度和内存效率而言,这是很重要的。 一个使用基元的集合库。

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

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