我正在寻找一个Java中的矩阵/线性代数库,它提供了一个可以从不同线程并发写入的稀疏矩阵。我遇到的大多数库要么根本不提供稀疏矩阵,要么1.)用一个开放寻址的哈希图来支持它们,要么2.)以CSR或CSC格式存储,这根本不适合多线程构造。现在,我正在使用并发哈希图并行收集条目,并从单个线程填充稀疏矩阵,但这似乎是浪费资源(存储并发哈希图的空间和基本上填充矩阵两次的时间)。
您不能只是神奇地使稀疏矩阵代数例程可伸缩地并行。解决这些问题涉及到一些最复杂的数值分析算法,并且仍然是深入研究的主题。
你没有说你想对这些矩阵做什么,但我想你想要线性方程组的解。如果你想并行,那么你需要一个第三方库,非常大的矩阵,可能还需要一些钱。
组装稀疏矩阵最常见的方法是将它们组装为三元组格式,并转换为压缩的行或列格式。组装可能很昂贵,但并行操作很容易。只需让每个线程都有自己的三元组列表,并在转换为压缩格式之前将它们拼接在一起。
我记得并行colt中的矩阵是线程安全的。该库是colt的多线程版本。