Какой лучший способ реализовать разреженный вектор в Java? - PullRequest
1 голос
/ 20 декабря 2009

Какой лучший способ реализовать разреженный вектор в Java?

Конечно, хорошо бы иметь что-то, с чем можно довольно легко манипулировать (нормализация, скалярное произведение и т. Д.)

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 20 декабря 2009

JScience имеет реализацию SparseVector , которая является частью пакета линейной алгебры .

2 голосов
/ 04 июня 2013

Вы также можете попытаться взглянуть на реализацию 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));
2 голосов
/ 20 декабря 2009

MTJ имеет класс Sparse Vector . Имеет функции нормы (1-норма, 2-норма и & infin; -норма) и функции точечного произведения.

...