使用它一段时间后,我真的很喜欢Numpy多维数组。使用简洁但可读且相当通用的代码编写算法是有帮助的。我希望在Java中有同样的东西。在用自己的类似Numpy的API编写多维数组之前,有这样的事情吗?
[PS]我搜了一下,没看到
答案 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大致相同,即它提供了更丰富的功能:
它也非常快:对于大多数操作来说它比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)
答案 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接口,有两个很好的实现,ArrayTable和HashBasedTable。它更像是一个数学工具的集合库,但它非常有用。
对于速度和内存效率,strre是trove。一个使用基元的集合库。
对于maticies操作,JAMA似乎很好。
据我所知,你需要编写更多代码并在java中使用更多的库而不是python。
答案 9 :(得分:0)