我们正在计算一些运行时受矩阵运算约束的东西.(如果感兴趣,请参阅下面的一些详细信息.)这一经历引发了以下问题:

人们有没有使用Java库进行矩阵运算(例如乘法、倒数等)的经验?例如:

我搜索了一下,什么也没找到.


我们的速度比较详细信息:

我们使用的是英特尔FORTRAN(iPort(iPort)10.120070913).我们已经使用Apache commons math 1.2 matrix ops在Java(1.6)中重新实现了它,并且它符合其所有精度数字.(我们有理由希望在Java中使用它.)(Java Double,Fortran real*8).Fortran:6分钟,Java 33分钟,同一台机器.jvisualm评测显示了在RealMatrixImpl中花费的大量时间.{getEntry,isValidCoordination}(在未发布的ApacheCommons math 2.0中似乎已经消失了,但2.0并没有更快).Fortran正在使用Atlas BLAS routine (dpotrf等).

显然,这可能取决于我们在每种语言中的代码,但我们相信大部分时间是在等价的矩阵运算中.

在其他几个不涉及库的计算中,Java并没有慢很多,有时甚至快很多.

推荐答案

我只想补充一下我的两分钱.我已经比较了这些库中的一些.我试着把一个3000乘以3000的双倍数矩阵与它自身相乘.研究结果如下.

使用带有C/C++、Octave、Python和R的多线程ATLAS,所需时间约为4秒.

将Jama与Java配合使用,所用时间为50秒.

在Java中使用Colt和Parallel Colt,耗时150秒!

将JBLAS与Java配合使用时,由于JBLAS使用多线程ATLAS,因此所用时间也在4秒左右.

所以对我来说,很明显Java库的性能不是很好.然而,如果有人必须用Java编写代码,那么最好的 Select 是JBLAS.Jama,Colt和Parallel Colt跑得不快.

Java相关问答推荐

Java加密/解密代码转换为PHP不起作用

使用json参数通过单击jSP文件中的按钮来运行server时出现问题

具有额外列的Hibert多对多关系在添加关系时返回NonUniqueHealthExcellent

BiPredicate和如何使用它

使用Java Streams API比较两个不同的Java集合对象和一个公共属性

替换com. sun. jndi. dns. DnsContextFactory Wildfly23 JDK 17

Hibernate 6支持Joda DateTime吗?

返回响应时,CamelCase命名约定不起作用

如何从错误通道回复网关,使其不会挂起

Jolt变换JSON数组问题

如何只修改父类ChroniclerView位置0处的第一个嵌套ChroniclerView(child)元素?

在Frege中,我如何将一个字符串安全地转换为一个可能的Int?

来自外部模块的方面(对于Java+Gradle项目)不起作用

Java中HashSet的搜索时间与TreeSet的搜索时间

除0错误/抱歉我的句子是PT

在Java泛型中使用通配符时,如何推断类型

如何在SWT菜单项文本中保留@字符

当使用不同的参数类型调用时,为什么围绕Objects.equals的类型安全包装不会失败?

JOOQ:批处理CRUD操作使用动态表定义,如何?

java 11上出现DateTimeParseException,但java 8上没有