Skip to content

Commit df3427d

Browse files
committed
Added from_coordinates method to SparseVector
1 parent 63bc250 commit df3427d

2 files changed

Lines changed: 14 additions & 0 deletions

File tree

pgvector/utils/sparsevec.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ def __init__(self, dim, indices, values):
1212
def __repr__(self):
1313
return f'SparseVector({self._dim}, {self._indices}, {self._values})'
1414

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+
1525
@classmethod
1626
def from_dense(cls, value):
1727
dim = len(value)

tests/test_sparse_vector.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ def test_from_dense(self):
88
assert SparseVector.from_dense([1, 0, 2, 0, 3, 0]).to_list() == [1, 0, 2, 0, 3, 0]
99
assert SparseVector.from_dense([1, 0, 2, 0, 3, 0]).to_numpy().tolist() == [1, 0, 2, 0, 3, 0]
1010

11+
def test_from_coordinates(self):
12+
assert SparseVector.from_coordinates({0: 1, 2: 2, 4: 3}, 6).to_list() == [1, 0, 2, 0, 3, 0]
13+
assert SparseVector.from_coordinates([(0, 1), (2, 2), (4, 3)], 6).to_list() == [1, 0, 2, 0, 3, 0]
14+
1115
def test_repr(self):
1216
assert repr(SparseVector.from_dense([1, 0, 2, 0, 3, 0])) == 'SparseVector(6, [0, 2, 4], [1.0, 2.0, 3.0])'
1317
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

Comments
 (0)