首页 > 解决方案 > Java中的数学矩阵

问题描述

据我了解,数学中使用的二维矩阵可以使用二维数组在 Java 中创建。当然,您可以对真正的数学矩阵做一些事情,例如加减它们。但是,使用 Java,您需要编写代码来执行此操作,并且有一些库可以提供该功能。

我想知道的是,Java 数组是否是处理矩阵数据的最佳方式。我可以想到二维矩阵填充了一些索引的情况,而由于数据的性质,许多索引只是留空。对我来说,这提出了一个问题,这是否是对内存空间的浪费,尤其是在矩阵非常大并且有很多空索引的情况下。

专门的 Java 数学库是否以不同的方式处理矩阵并且不依赖二维数组?或者他们是否也使用常规的 Java 数组并且只是忍受浪费的内存?

标签: javaarraysmatrix

解决方案


一些东西:

  1. 永远不要创建二维数组的矩阵。最好使用带有带有 2 个参数的类访问器的一维数组。原因纯粹是为了性能。当您分配一块连续的内存时,CPU 就有机会在一个内存页中分配整个矩阵,这将最大限度地减少缓存未命中,从而提高性能。

  2. 具有许多零的矩阵称为稀疏矩阵。在使用稀疏矩阵和数组中有许多零之间总是需要权衡取舍。

    • 连续数组将允许编译器使用向量运算,例如 SIMD,用于加法、减法等。
    • 如果零的相对数量非常高,并且您以一种聪明的方式实现它,那么非连续数组会更快。
  3. 我不相信 java 为稀疏矩阵提供了一个库,但我敢肯定那里有一些。我是一名 C++ 开发人员,之所以提出这个问题,是因为我在学术生涯中经常处理矩阵问题。具有简单和高级接口的著名 C++ 库是Armadillo

希望这可以帮助。


推荐阅读