We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 63bc250 commit df3427dCopy full SHA for df3427d
2 files changed
pgvector/utils/sparsevec.py
@@ -12,6 +12,16 @@ def __init__(self, dim, indices, values):
12
def __repr__(self):
13
return f'SparseVector({self._dim}, {self._indices}, {self._values})'
14
15
+ @classmethod
16
+ def from_coordinates(cls, coordinates, dim):
17
+ if isinstance(coordinates, dict):
18
+ coordinates = coordinates.items()
19
+ elements = [(i, v) for i, v in coordinates]
20
+ elements.sort()
21
+ indices = [int(v[0]) for v in elements]
22
+ values = [float(v[1]) for v in elements]
23
+ return cls(dim, indices, values)
24
+
25
@classmethod
26
def from_dense(cls, value):
27
dim = len(value)
tests/test_sparse_vector.py
@@ -8,6 +8,10 @@ def test_from_dense(self):
8
assert SparseVector.from_dense([1, 0, 2, 0, 3, 0]).to_list() == [1, 0, 2, 0, 3, 0]
9
assert SparseVector.from_dense([1, 0, 2, 0, 3, 0]).to_numpy().tolist() == [1, 0, 2, 0, 3, 0]
10
11
+ def test_from_coordinates(self):
+ assert SparseVector.from_coordinates({0: 1, 2: 2, 4: 3}, 6).to_list() == [1, 0, 2, 0, 3, 0]
+ assert SparseVector.from_coordinates([(0, 1), (2, 2), (4, 3)], 6).to_list() == [1, 0, 2, 0, 3, 0]
def test_repr(self):
assert repr(SparseVector.from_dense([1, 0, 2, 0, 3, 0])) == 'SparseVector(6, [0, 2, 4], [1.0, 2.0, 3.0])'
assert str(SparseVector.from_dense([1, 0, 2, 0, 3, 0])) == 'SparseVector(6, [0, 2, 4], [1.0, 2.0, 3.0])'
0 commit comments