Java等效于Numpy多维对象
使用它一段时间后,我真的很喜欢Numpy多维数组。 使用简洁但可读且相当通用的代码编写算法是有帮助的。 我希望在Java中有同样的东西。 在用自己的类似Numpy的API编写多维数组之前,有这样的事情吗?
[PS]我搜索了一下,没有看到
OP是从2011年开始的。因此,到2015年底,我想提一下,镇上有一个新的孩子,声称自己是java – > nd4j 。 好消息是nd4j是一个在blas等不同库之上的抽象层。 根据矩阵的大小,底层实现的速度是numpy或jblas的两倍。 而且您的代码是真正独立于平台的。
所以最接近的比赛似乎是柯尔特! http://acs.lbl.gov/software/colt/
它具有多维数组对象,数组视图和通常的线性代数! 它似乎相当有效。
图书馆Vectorz ( https://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。