当前位置: 首页 > 面试题库 >

Java矩阵数学库的性能?

寿亦
2023-03-14
问题内容

我们正在计算某种其运行时间受矩阵运算约束的东西。(如果感兴趣,请在下面提供一些详细信息。)这种经历提示了以下问题:

人们是否对使用Java库进行矩阵数学运算(例如,乘法,逆运算等)有经验?例如:

  • JAMA
  • COLT
  • Apache commons math

我搜索后什么也没找到。

我们的速度比较细节:

我们正在使用Intel FORTRAN(ifort(IFORT)10.1 20070913)。我们已经使用Apache Commons Math 1.2矩阵操作在Java(1.6)中重新实现了它,并且它同意其所有准确性。(我们有使用Java的理由。)(Java加倍,Fortran real * 8)。Fortran:6分钟,Java 33分钟,同一台计算机。jvisualm性能分析显示在RealMatrixImpl。{getEntry,isValidCoordinate}上花费了很多时间(在未发布的Apache Commons Math 2.0中似乎消失了,但是2.0并没有更快)。Fortran使用Atlas BLAS例程(dpotrf等)。

显然,这可能取决于我们使用每种语言编写的代码,但是我们相信大多数时间都在等效的矩阵运算中。

在其他一些不涉及库的计算中,Java的运行速度并不慢,有时甚至快得多。


问题答案:

只是加上我的2美分。我已经比较了其中一些库。我试图将3000乘以3000的双精度矩阵与其自身相乘。结果如下。

将多线程ATLAS与C / C ++,Octave,Python和R配合使用,所需时间约为4秒。

结合使用Jama和Java,花费的时间为50秒。

将Colt和Parallel Colt与Java结合使用,花费的时间为150秒!

将JBLAS与Java结合使用时,由于JBLAS使用多线程ATLAS,因此再次花费了大约4秒钟的时间。

因此对我来说,很明显Java库的性能不是很好。但是,如果有人必须用Java编写代码,那么最好的选择是JBLAS。Jama,Colt和Parallel Colt速度不快。



 类似资料:
  • matlib.empty()函数返回一个新的矩阵,而不初始化元素。 该函数接受以下参数。 其中: import numpy.matlib import numpy as np print np.matlib.empty((2,2)) # 填充为随机数据 输出如下: [[ 2.12199579e-314, 4.24399158e-314] [ 4.24399158e-314, 2.121

  • 我目前正在做一个音频信号处理项目,需要在Java中的一个复杂矩阵上使用SVD。我当前的线性代数库是Apache Commons。但它只提供实矩阵的SVD,JAMA、JBLAS、EJML、ojAlgo都不支持复杂的SVD。 我一直在用一些技巧从一个等效的实矩阵中找到SVD。然而,当我重建矩阵时,这种技术对于虚部有很大的不准确性。

  • 主要内容:matlib.empty(),numpy.matlib.zeros(),numpy.matlib.ones(),numpy.matlib.eye(),numpy.matlib.identity(),numpy.matlib.rand()NumPy 提供了一个 矩阵库模块 ,该模块中的函数返回的是一个 matrix 对象,而非 ndarray 对象。矩阵由 m 行 n 列(m*n)元素排列而成,矩阵中的元素可以是数字、符号或数学公式等。 matlib.empty() matlib.emp

  • NumPy包中包含一个Matrix库numpy.matlib 。 该模块具有返回矩阵而不是ndarray对象的函数。 matlib.empty() matlib.empty()函数返回一个新矩阵而不初始化条目。 该函数采用以下参数。 numpy.matlib.empty(shape, dtype, order) Where, Sr.No. 参数和描述 1 shape int或tuple定义新矩阵

  • 注:我也在这里的Eigen论坛上发表了这篇文章 我想用一个3x3矩阵预乘3xN个矩阵,即,变换3D点,如p_dest=T*p_source 初始化矩阵后: 而且 进行NT重复只是为了计算平均时间 我很惊讶逐列乘法比直接乘法快4/5倍(如果我不使用,直接乘法甚至更慢,但这没有问题,因为它是临时复制)。我尝试将NUMCOLS从0改为1000000,关系是线性的。

  • 主要内容:可追溯性矩阵的目标可追踪性矩阵是一种表格类型的文档,用于开发软件应用程序以跟踪需求。它可用于向前(从需求到设计或编码)和向后(从编码到需求)跟踪。它也称为需求可追踪性矩阵(RTM)。 通常,这就像一个包含表格的工作表文档,但是还有许多用户定义的可追溯性矩阵模板。可追溯性矩阵中的每个要求都与其各自的测试用例相关联,以便可以根据具体要求顺序执行测试。 下面给出一个表作为示例,以便可以理解可追溯性矩阵的格式: 业务需求