java - Java中的数学矩阵
问题描述
据我了解,数学中使用的二维矩阵可以使用二维数组在 Java 中创建。当然,您可以对真正的数学矩阵做一些事情,例如加减它们。但是,使用 Java,您需要编写代码来执行此操作,并且有一些库可以提供该功能。
我想知道的是,Java 数组是否是处理矩阵数据的最佳方式。我可以想到二维矩阵填充了一些索引的情况,而由于数据的性质,许多索引只是留空。对我来说,这提出了一个问题,这是否是对内存空间的浪费,尤其是在矩阵非常大并且有很多空索引的情况下。
专门的 Java 数学库是否以不同的方式处理矩阵并且不依赖二维数组?或者他们是否也使用常规的 Java 数组并且只是忍受浪费的内存?
解决方案
一些东西:
永远不要创建二维数组的矩阵。最好使用带有带有 2 个参数的类访问器的一维数组。原因纯粹是为了性能。当您分配一块连续的内存时,CPU 就有机会在一个内存页中分配整个矩阵,这将最大限度地减少缓存未命中,从而提高性能。
具有许多零的矩阵称为稀疏矩阵。在使用稀疏矩阵和数组中有许多零之间总是需要权衡取舍。
- 连续数组将允许编译器使用向量运算,例如 SIMD,用于加法、减法等。
- 如果零的相对数量非常高,并且您以一种聪明的方式实现它,那么非连续数组会更快。
我不相信 java 为稀疏矩阵提供了一个库,但我敢肯定那里有一些。我是一名 C++ 开发人员,之所以提出这个问题,是因为我在学术生涯中经常处理矩阵问题。具有简单和高级接口的著名 C++ 库是Armadillo。
希望这可以帮助。
推荐阅读
- windows - Windows 10 批处理文件 - IF 使用情况
- php - 从另一个表 MySQL 中获取名称
- python - 在 pymongo 中使用 Find
- osgi - 如何以编程方式从 Karaf 功能中排除捆绑包
- java - 正则表达式由“:{在java中分割?
- php - 邮件未使用 laravel 中的 SendsPasswordResetEmails 类发送忘记密码链接
- opengl - OpenGL:如何最小化绘图?
- powerbi - power bi计算sameperiodlastyear问题
- matlab - 如何在 for 循环中绘图?MATLAB
- qt - 将模型附加到 VXYModelMapper