[Scipy-svn] r4856 - in trunk/scipy/sparse: . tests
scipy-svn at scipy.org
scipy-svn at scipy.org
Mon Oct 27 00:14:57 EDT 2008
Author: wnbell
Date: 2008-10-26 23:14:53 -0500 (Sun, 26 Oct 2008)
New Revision: 4856
Modified:
trunk/scipy/sparse/base.py
trunk/scipy/sparse/bsr.py
trunk/scipy/sparse/compressed.py
trunk/scipy/sparse/dia.py
trunk/scipy/sparse/dok.py
trunk/scipy/sparse/lil.py
trunk/scipy/sparse/tests/test_base.py
Log:
fixed handling of dtype= constructor argument in sparse case
ensure that .astype(dtype) maintains sparse format
Modified: trunk/scipy/sparse/base.py
===================================================================
--- trunk/scipy/sparse/base.py 2008-10-27 03:56:22 UTC (rev 4855)
+++ trunk/scipy/sparse/base.py 2008-10-27 04:14:53 UTC (rev 4856)
@@ -87,7 +87,7 @@
raise NotImplementedError
def astype(self, t):
- return self.tocsr().astype(t)
+ return self.tocsr().astype(t).asformat(self.format)
def asfptype(self):
"""Upcast matrix to a floating point format (if necessary)"""
Modified: trunk/scipy/sparse/bsr.py
===================================================================
--- trunk/scipy/sparse/bsr.py 2008-10-27 03:56:22 UTC (rev 4855)
+++ trunk/scipy/sparse/bsr.py 2008-10-27 04:14:53 UTC (rev 4856)
@@ -156,17 +156,20 @@
M = len(self.indptr) - 1
N = self.indices.max() + 1
except:
- raise ValueError,'unable to infer matrix dimensions'
+ raise ValueError('unable to infer matrix dimensions')
else:
R,C = self.blocksize
self.shape = (M*R,N*C)
if self.shape is None:
if shape is None:
- #infer shape here
- raise ValueError,'need to infer shape'
+ #TODO infer shape here
+ raise ValueError('need to infer shape')
else:
self.shape = shape
+
+ if dtype is not None:
+ self.data = self.data.astype(dtype)
self.check_format(full_check=False)
Modified: trunk/scipy/sparse/compressed.py
===================================================================
--- trunk/scipy/sparse/compressed.py 2008-10-27 03:56:22 UTC (rev 4855)
+++ trunk/scipy/sparse/compressed.py 2008-10-27 04:14:53 UTC (rev 4856)
@@ -83,6 +83,9 @@
raise ValueError,'unable to infer matrix dimensions'
else:
self.shape = self._swap((major_dim,minor_dim))
+
+ if dtype is not None:
+ self.data = self.data.astype(dtype)
self.check_format(full_check=False)
Modified: trunk/scipy/sparse/dia.py
===================================================================
--- trunk/scipy/sparse/dia.py 2008-10-27 03:56:22 UTC (rev 4855)
+++ trunk/scipy/sparse/dia.py 2008-10-27 04:14:53 UTC (rev 4856)
@@ -100,6 +100,9 @@
self.shape = A.shape
+ if dtype is not None:
+ self.data = self.data.astype(dtype)
+
#check format
if self.offsets.ndim != 1:
raise ValueError('offsets array must have rank 1')
Modified: trunk/scipy/sparse/dok.py
===================================================================
--- trunk/scipy/sparse/dok.py 2008-10-27 03:56:22 UTC (rev 4855)
+++ trunk/scipy/sparse/dok.py 2008-10-27 04:14:53 UTC (rev 4856)
@@ -59,6 +59,10 @@
arg1 = arg1.copy()
else:
arg1 = arg1.todok()
+
+ if dtype is not None:
+ arg1 = arg1.astype(dtype)
+
self.update(arg1)
self.shape = arg1.shape
self.dtype = arg1.dtype
Modified: trunk/scipy/sparse/lil.py
===================================================================
--- trunk/scipy/sparse/lil.py 2008-10-27 03:56:22 UTC (rev 4855)
+++ trunk/scipy/sparse/lil.py 2008-10-27 04:14:53 UTC (rev 4856)
@@ -66,6 +66,10 @@
A = arg1.copy()
else:
A = arg1.tolil()
+
+ if dtype is not None:
+ A = A.astype(dtype)
+
self.shape = A.shape
self.dtype = A.dtype
self.rows = A.rows
Modified: trunk/scipy/sparse/tests/test_base.py
===================================================================
--- trunk/scipy/sparse/tests/test_base.py 2008-10-27 03:56:22 UTC (rev 4855)
+++ trunk/scipy/sparse/tests/test_base.py 2008-10-27 04:14:53 UTC (rev 4856)
@@ -150,13 +150,13 @@
def test_from_array(self):
A = array([[1,0,0],[2,3,4],[0,5,0],[0,0,0]])
- assert_array_equal(self.spmatrix(A).todense(), A)
+ assert_array_equal(self.spmatrix(A).toarray(), A)
A = array([[1.0 + 3j, 0, 0],
[ 0, 2.0 + 5, 0],
[ 0, 0, 0]])
- assert_array_equal(self.spmatrix(A).todense(), A)
- assert_array_equal(self.spmatrix(A, dtype='int16').todense(), A.astype('int16'))
+ assert_array_equal(self.spmatrix(A).toarray(), A)
+ assert_array_equal(self.spmatrix(A, dtype='int16').toarray(), A.astype('int16'))
def test_from_matrix(self):
A = matrix([[1,0,0],[2,3,4],[0,5,0],[0,0,0]])
@@ -165,8 +165,8 @@
A = matrix([[1.0 + 3j, 0, 0],
[ 0, 2.0 + 5, 0],
[ 0, 0, 0]])
- assert_array_equal(self.spmatrix(A).todense(), A)
- assert_array_equal(self.spmatrix(A, dtype='int16').todense(), A.astype('int16'))
+ assert_array_equal(self.spmatrix(A).toarray(), A)
+ assert_array_equal(self.spmatrix(A, dtype='int16').toarray(), A.astype('int16'))
def test_from_list(self):
A = [[1,0,0],[2,3,4],[0,5,0],[0,0,0]]
@@ -175,9 +175,27 @@
A = [[1.0 + 3j, 0, 0],
[ 0, 2.0 + 5, 0],
[ 0, 0, 0]]
- assert_array_equal(self.spmatrix(A).todense(), array(A))
+ assert_array_equal(self.spmatrix(A).toarray(), array(A))
assert_array_equal(self.spmatrix(A, dtype='int16').todense(), array(A).astype('int16'))
+ def test_from_sparse(self):
+ D = array([[1,0,0],[2,3,4],[0,5,0],[0,0,0]])
+ S = csr_matrix(D)
+ assert_array_equal(self.spmatrix(S).toarray(), D)
+ S = self.spmatrix(D)
+ assert_array_equal(self.spmatrix(S).toarray(), D)
+
+
+ D = array([[1.0 + 3j, 0, 0],
+ [ 0, 2.0 + 5, 0],
+ [ 0, 0, 0]])
+ S = csr_matrix(D)
+ assert_array_equal(self.spmatrix(S).toarray(), D)
+ assert_array_equal(self.spmatrix(S, dtype='int16').toarray(), D.astype('int16'))
+ S = self.spmatrix(D)
+ assert_array_equal(self.spmatrix(S).toarray(), D)
+ assert_array_equal(self.spmatrix(S, dtype='int16').toarray(), D.astype('int16'))
+
#def test_array(self):
# """test array(A) where A is in sparse format"""
# assert_equal( array(self.datsp), self.dat )
More information about the Scipy-svn
mailing list