[SciPy-User] setting submatrix of sparse matrix
Duilio Tadeu
duiliotadeu at gmail.com
Fri Apr 20 15:07:24 EDT 2012
Hi,
I am developing a simple Finite Elements code and there a part of the code
where I need to set some elements of the sparse matrix (actually a submatrix),
But I could not make it work. I have tried many ways.
I describe the better way I could try. The array index idx is 1x3,
so idx1 and idx2 is 3x3.
The (small) matrix M is 3x3. The matrix A is a sparse matrix,
lil_matrix sparse matrix of scipy.sparse
###### partial code ##################
M = local_matrix(x,y)
M=M.ravel()
idx1,idx2 = numpy.meshgrid(idx,idx)
idx1=idx1.ravel()
idx2=idx2.ravel()
A[idx1,idx2] = A[idx1,idx2] + M
###################################
In fact, I am trying to migrate from MATLAB to Scipy/Numpy, but this
part is taking some time and is
becoming frustrating, since I could not find any kind of way to
perform this task.
In MATLAB, the code would be just:
M = local_matrix(x,y)
A[idx,idx] = A[idx,idx] + M
Which is shorter and easy. I send next the error message. Any help
is welcome. Thanks, Duilio
131 idx2=idx2.ravel()
132
--> 133 A[idx1,idx2] = A[idx1,idx2] + M
/usr/lib/python2.6/dist-packages/scipy/sparse/lil.pyc in
__setitem__(self, index, x)
318 else:
319 for ii, jj, xx in zip(i, j, x):
--> 320 self._insertat(ii, jj, xx)
321 elif isinstance(i, slice) or issequence(i):
322 rows = self.rows[i]
/usr/lib/python2.6/dist-packages/scipy/sparse/lil.pyc in
_insertat(self, i, j, x)
230 row = self.rows[i]
231 data = self.data[i]
--> 232 self._insertat2(row, data, j, x)
233
234 def _insertat2(self, row, data, j, x):
/usr/lib/python2.6/dist-packages/scipy/sparse/lil.pyc in
_insertat2(self, row, data, j, x)
244
245 if not np.isscalar(x):
--> 246 raise ValueError('setting an array element with a sequence')
247
248 try:
ValueError: setting an array element with a sequence
More information about the SciPy-User
mailing list