在Java中实现稀疏向量的最佳方法是什么?
当然,好处是可以很容易地操作(标准化,标量产品等)
提前致谢
答案 0 :(得分:2)
MTJ有Sparse Vector个班级。它具有范数函数(1范数2范数和∞范数)和点积函数。
答案 1 :(得分:2)
JScience有一个SparseVector实现,是linear algebra包的一部分。
答案 2 :(得分:2)
您还可以尝试查看la4j的CompressedVector实施情况。它使用一对数组:值数组和其指标数组。并且通过二进制搜索,它只是飞行。因此,此实施可确保O(log n)
/ get
操作的set
运行时间。
只是一个简短的例子
Vector a = new CompressedVector(new double[]{ 1.0, 2.0, 3.0 }).
// calculates L_1 norm of the vector
double n = a.norm();
// calculates the sum of vectors elements
double s = a.fold(Vectors.asSumAccumulator(0.0));