gpt4 book ai didi

java - 矩阵乘法java 1.8

转载 作者:搜寻专家 更新时间:2023-11-01 03:23:44 29 4
gpt4 key购买 nike

您认为使用 Java 1.8 中新的 Stream 接口(interface)可以实现稀疏矩阵运算吗?如果是,我们需要如何实现矩阵和操作。显然,我正在寻找它最终能够使用“自动”并行化。

最佳答案

可以清楚地完成。像下面这样的简单 SPMV(稀疏矩阵 vector 乘法)怎么样,稀疏矩阵在坐标 COO 中表示格式(最简单的稀疏格式):

class COO {
int x, y, value;
}

public static ArrayList<Integer> spmv(List<COO> values, ArrayList<Integer> v) {
final ArrayList<Integer> result = new ArrayList<>(Collections.nCopies(v.size(), 0));
values.stream().forEach(
coo -> result.set(coo.x, result.get(coo.x) + coo.value * v.get(coo.y))
);
return result;
}

但我真诚地建议您使用一些预编码的东西,如果您不想在接下来的 3 年里花时间了解稀疏矩阵运算的性能影响。这是一个相当大的研究/优化主题,需要考虑许多因素(就在我的脑海中):

  1. 矩阵值的调度/重新排序以提高缓存性能
  2. 针对特定问题使用最佳存储格式(例如,查看关于 netlib 的调查)

与手工实现相比,有许多实现可以实现数量级的性能改进。仅举几例,查看:

  1. Intel MKL Sparse BLAS

  2. Nvidia's cuBLAS

如果它们还不存在,我会写绑定(bind)到那些,尽管像 la4j看起来很有前途。

关于java - 矩阵乘法java 1.8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21317219/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com