使用Numpy多维数组一段时间后,我真的很喜欢它。使用它能够编写简洁易读且相对通用的算法。我希望在Java中也能有类似的东西。在自己编写具备Numpy API的多维数组之前,是否已经有这样的工具存在?
[PS] 我查了一下,没有找到。
使用Numpy多维数组一段时间后,我真的很喜欢它。使用它能够编写简洁易读且相对通用的算法。我希望在Java中也能有类似的东西。在自己编写具备Numpy API的多维数组之前,是否已经有这样的工具存在?
[PS] 我查了一下,没有找到。
这个库叫做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的作者
applyOp
函数可以让你对整个数组应用任意(包括自定义)操作。值得研究。 - mikera您可以使用数值库进行线性代数计算,这些库中将包含矩阵。请查看Apache Commons Math。
这是一个旧问题,但我想添加这两个Java ndarray库:
所以最接近的匹配似乎是Colt!http://acs.lbl.gov/software/colt/
它具有多维数组对象、数组视图和通常的线性代数!而且它似乎相当高效。
numpy
远非等效。 - Dims另一个很好的选择是使用Spark的DataFrame API。
http://spark.apache.org/docs/latest/sql-programming-guide.html
这为您提供了一个类似于Pandas/Numpy的Java数组接口。此外,代码本质上是可并行的,如果数据量增加,可以在一组机器上运行。Java对于nd-array(无运算符重载等)而言有点笨拙。如果可以使用Kotlin,可以尝试Kotlin-NumPy(https://github.com/Kotlin/kotlin-numpy)。
nd4j(https://github.com/deeplearning4j/nd4j)曾经很受欢迎,但现在似乎已不再维护。
我认为Java没有像NumPy一样的东西。NumPy是一个大型的数学导向项目,不太适合Java的思维方式。
这并不意味着Java中没有好的集合库!Guava有Table接口,其中包括两个很好的实现,ArrayTable和HashBasedTable。它更像是一个集合库而不是数学工具,但非常有用。
对于速度和内存效率,可以使用Trove。这是一个与基本类型一起使用的集合库。
对于矩阵操作,JAMA似乎不错。
据我所知,在Java中,您需要编写更多的代码并使用更多的库,而不是Python。