From af8582dbd6e951bf2dc5bc98f28277d454171094 Mon Sep 17 00:00:00 2001 From: Mario Graff Date: Sat, 22 Apr 2017 22:44:16 -0500 Subject: [PATCH] constant --- SparseArray/__init__.py | 2 +- SparseArray/sparse_array.pyx | 15 +++++++++++++++ SparseArray/tests/test_sparse_array.py | 12 +++++++++++- VERSION | 2 +- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/SparseArray/__init__.py b/SparseArray/__init__.py index edcde54..169e6a5 100644 --- a/SparseArray/__init__.py +++ b/SparseArray/__init__.py @@ -14,4 +14,4 @@ from .sparse_array import SparseArray __all__ = ["SparseArray"] -__version__ = '0.8.12' +__version__ = '0.8.13' diff --git a/SparseArray/sparse_array.pyx b/SparseArray/sparse_array.pyx index ee3b16e..3a23a0f 100644 --- a/SparseArray/sparse_array.pyx +++ b/SparseArray/sparse_array.pyx @@ -65,6 +65,21 @@ cdef class SparseArray: r.data = array.array('d', [x[1] for x in index_data]) r.non_zero = len(index_data) return r + + @classmethod + def constant(cls, value, index, size): + cdef SparseArray r = cls() + cdef double *data_value + cdef Py_ssize_t i, index_size = len(index) + r._len = size + r.non_zero = index_size + r.index = array.array('I', index) + r.data = array.clone(r.data, index_size, zero=False) + data_value = r.data.data.as_doubles + for i in range(index_size): + data_value[i] = value + return r + @property def density(self): diff --git a/SparseArray/tests/test_sparse_array.py b/SparseArray/tests/test_sparse_array.py index eaa37d2..f620ad1 100644 --- a/SparseArray/tests/test_sparse_array.py +++ b/SparseArray/tests/test_sparse_array.py @@ -610,4 +610,14 @@ def test_argmin(): sp_res = SparseArray.argmin([a, b, c]) [assert_almost_equals(x, y) for x, y in zip(res, sp_res.full_array())] - + +def test_constant(): + index = [x for x in range(0, 100, 10)] + a = SparseArray.constant(-2.3, index, 100) + for v, w in zip(a.index, index): + assert_almost_equals(v, w) + for v in a.data: + assert_almost_equals(v, -2.3) + assert len(a) == 100 + assert a.non_zero == 10 + diff --git a/VERSION b/VERSION index 7eff8ab..c2f73c6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.8.12 +0.8.13