访问 Commons Math 库中稀疏矩阵的非零元素
Access the non-zero elements of a sparse matrix in the Commons Math library
我正在使用 Apache Commons 数学库进行矩阵运算,因为尽管它绝对缺乏适当的文档,但它看起来相当完整。
import org.apache.commons.math3.linear.SparseFieldMatrix;
//inside a function:
int n = 300;
SparseFieldMatrix Y = new SparseFieldMatrix(ComplexField.getInstance(), n, n);
// some code to fill values into Y
我看过方法 Y.walkInRowOrder(FieldMatrixChangingVisitor<Complex>() );
,我想它可以满足我的要求:列出包含每一行元素的列。
但是我不知道如何使用它,因为 FieldMatrixChangingVisitor
无法实例化。什么是正确的方法?
尽管投了反对票,但我认为这是一个合理的问题,在阅读大量代码后我找到了答案。
答案是,使用公共数学库的稀疏实现,不可能找到存储的稀疏矩阵的非零元素。相反,您需要将所有行和列循环到 'rediscover' 哪些元素不为零(换句话说,哪些 elmenets 在内部存储结构中)。
因此,如果您正在阅读本文,请考虑构建一个结构来映射您的稀疏矩阵索引,或者更改为另一个稀疏代数库。
我正在使用 Apache Commons 数学库进行矩阵运算,因为尽管它绝对缺乏适当的文档,但它看起来相当完整。
import org.apache.commons.math3.linear.SparseFieldMatrix;
//inside a function:
int n = 300;
SparseFieldMatrix Y = new SparseFieldMatrix(ComplexField.getInstance(), n, n);
// some code to fill values into Y
我看过方法 Y.walkInRowOrder(FieldMatrixChangingVisitor<Complex>() );
,我想它可以满足我的要求:列出包含每一行元素的列。
但是我不知道如何使用它,因为 FieldMatrixChangingVisitor
无法实例化。什么是正确的方法?
尽管投了反对票,但我认为这是一个合理的问题,在阅读大量代码后我找到了答案。
答案是,使用公共数学库的稀疏实现,不可能找到存储的稀疏矩阵的非零元素。相反,您需要将所有行和列循环到 'rediscover' 哪些元素不为零(换句话说,哪些 elmenets 在内部存储结构中)。
因此,如果您正在阅读本文,请考虑构建一个结构来映射您的稀疏矩阵索引,或者更改为另一个稀疏代数库。