- #1
schniefen
- 178
- 4
- TL;DR Summary
- I'm creating a sparse matrix class and am stuck on how to update the attributes within the class.
I'm working on a sparse matrix class, where I'm creating an internal representation of a random matrix a la CSR (Sparse Matrix). 'A' signifies the non-zero elements in the matrix, 'IA' are the rowpointers and 'JA' the column indices of the non-zero elements.
When I change a value in the input matrix, this is registered and updated in the attribute self._matrix. But neither A, IA, or JA are.
A should be equal to [9 5 8 3 6] and _number_of_nonzero should be equal to 5. IA and JA should then also change. How can I update self._A, self._IA and self._JA? I've been experimenting with setter and getter methods, but without success. Furthermore, I'm confused why self._matrix updates automatically.
Python:
import numpy as np
class SparseMatrix:
def __init__(self,Matrix):
if not isinstance(Matrix,np.ndarray):
raise TypeError('Matrix should be of type np.ndarray')
self._matrix=Matrix
#setting up an internal representation of CSR, A and JA
self._A=self._matrix[self._matrix!=0]
self._JA=np.nonzero(self._matrix)[1]
#IA
rowpointer=[0]
for i in range(self._matrix.shape[0]):
indices=len(np.nonzero(self._matrix[i])[0])
rowpointer.append(indices+rowpointer[i])
self._IA=np.asarray(rowpointer)
# more attributes
self._number_of_nonzero=len(np.nonzero(self._matrix)[0])
self.intern_represent='CSR'
def __repr__(self):
return 'A={}\nIA={}\nJA={}'.format(self._A,self._IA,self._JA)
Python:
d=np.array([[0,0,0,0],
[5,8,0,0],
[0,0,3,0],
[0,6,0,0]])
f=SparseMatrix(d)
f._matrix[0,0]=9 #change first element of matrix to 9
print(f._matrix)
print(f)
Code:
array([[9,0,0,0],
[5,8,0,0],
[0,0,3,0],
[0,6,0,0]])
A=[5 8 3 6]
IA=[0 0 2 3 4]
JA=[0 1 2 1]
4