java - Java 高性能线性代数库,功能类似于 Scala 的 Breeze
问题描述
我正在寻找一个可以有效处理添加小矩阵的库(内存占用最少)。有 JBLAS 或 ND4j 之类的选择(虽然我认为不是单线程的),但它们缺少下面描述的重要功能。
假设我有一个较大的矩阵和一个较小的矩阵,我需要将较小的矩阵添加到较大矩阵的区域中,而无需创建中间数组或将较小的矩阵增加到具有大量零的较大矩阵的大小。换句话说,我想从 Scala 的 Breeze 库中获取功能 - 您在矩阵上创建一个视图,然后您可以使用它来执行任何操作,例如添加子矩阵。
在 EJML 中打开了一个问题。
解决方案
好吧,似乎最好的选择是ojAlgo。根据这项综合测试,它具有出色的性能。重要的是它允许非常灵活的转换,可以就地和延迟执行(一次很多)。例如
PrimitiveDenseStore m1 = PrimitiveDenseStore.FACTORY.makeZero(10, 10);
PrimitiveDenseStore m2 = PrimitiveDenseStore.FACTORY.makeZero(3, 3);
m2.add(0, 0, 5D);
m2.add(1, 1, 2D);
m2.add(1, 2, 3D);
m2.add(2, 1, -10D);
m1
.regionByColumns(4, 5, 6)
.regionByRows(4, 5, 6)
.modifyMatching(PrimitiveMath.ADD, m2);
assertThat(m1.aggregateAll(MINIMUM)).isEqualTo(5);
更多例子在这里。真正漂亮的 API 和功能。
推荐阅读
- javascript - 如何使用正则表达式或字符串函数在字符串中插入反斜杠以在 JavaScript 中的 \ 之后提取子字符串?
- c - 编译器优化不尊重`-pthreads`
- python - 使用请求模块 Python 登录 Instagram 时遇到问题
- angular - 安装角度编译器的问题
- python - 烧瓶:sqlalchemy.exc.ProgrammingError:(psycopg2.errors.UndefinedColumn)列
- html - 滚动时jQuery元素位置绝对更改顶部
- python - Python:如何将 cookie 从 .txt 加载到 selenium 获取 webdriver 以登录到安全站点
- android - zxing 没有检测到条形码。可能的宽度/高度问题?
- java - 我想在基于 Java 的游戏中使用 RPI SenseHat 上的操纵杆作为输入
- javascript - 如何将字符串转换为毫秒?