【问题标题】:A math matrix in JavaJava中的数学矩阵
【发布时间】:2019-04-03 17:23:17
【问题描述】:

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

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

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

【问题讨论】:

标签: java arrays matrix


【解决方案1】:

一些事情:

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

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

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

希望这会有所帮助。

【讨论】:

  • Java 中的 IMO 矩阵数学是一个巨大的痛点,图书馆没有明显的赢家。也就是说,我通常使用 Efficient Java Matrix Library。只要矩阵大小不变得庞大,它就相当有效。
猜你喜欢
  • 1970-01-01
  • 2010-10-06
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多