[SciPy-user] Replacing elements in matrix

Stephen Walton stephen.walton at csun.edu
Tue Apr 26 12:15:56 CDT 2005


Dimitri D'Or wrote:

> Hello, 
>  
> I come from the Matlab world and I'm used to write operations such as: 
> A[indexi,indexj]=A[indexi,indexj]+B 
> where A is a n by n matrix, indexi is i by 1 vector, indexj is a j by 
> 1 vector and B is a i by j matrix. 
>

Novice alert here, but I think I can partially answer this one.  The key 
idea is that Numeric and numarray indexing require indexi and indexj to 
have the same number of elements.  A[indexi,indexj] then returns an 
array containing A[indexi[0],indexj[0]],A[indexi[1],indexj[1]],...].  
This is if indexi and indexj are rank 1 arrays.  The indexing takes a 
"hint" from the shape of indexi and indexj and returns the same shape 
output (that's the best way I've been able to put it).

A=array([[1,5,7,8,2],[5,3,4,6,7],[9,4,6,7,2],[0,2,0,3,4]]) 
indexi=array([0,2]) 
indexj=array([1,2,4])
B=array([[10,20,30],[100,200,300]])

The definitions of indexi and indexj should actually be:

indexi=array([[0,0,0],[2,2,2]])
indexj=array([[1,2,4],[1,2,4]])

With this change

A[indexi,indexj]=A[indexi,indexj]+B

does work.  Notice that becase indexi.shape and indexj.shape are both 
(2,3), the output A[indexi,indexj] has shape (2,3).  If they both had 
shape (6,), then A[indexi,indexj] would also have shape (6,).



More information about the SciPy-user mailing list