[SciPy-user] Replacing elements in matrix
elcorto at gmx.net
Tue Apr 26 13:07:34 CDT 2005
David M. Cooke wrote:
> steve schmerler <elcorto at gmx.net> writes:
>>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. With this operation, some of the elements
>>>of A are replaced by their original value augmented by some value
>>>coming from B. for example, take
>>>B=array([[10,20,30],[100,200,300]]) With this, Matlab results would
>>>be A[indexi,indexj]=array([[5, 7, 2],[4, 6, 2]]) and
>>>I would like to make the same operation with Python. Would you
>>>please propose me a compact code for achieving that?
>>Hmm, I'm affraid this isn't straightforward. To select arbitrary rows and cols from A you can use
>> In : take(take(A,(0,2),axis=0),(1,2,4),axis=1)
>> array([[5, 7, 2],
>> [4, 6, 2]])
>>but any operation on the selected submatrix won't alter A.
>>With slicing, e.g. select the upper 2x2 block
>> In : A[0:2,0:2]
>> array([[1, 5],
>> [5, 3]])
>>you also can't alter A by performing some operation on the subblock, e.g.
> eh? No, a slice is a view of the matrix, so it also operates on the
> original matrix.
>>doesn't change A.
> Of course, that doesn't change an array at all (you'll get a new 2x2
> matrix). This will:
> A[0:2,0:2] *= 100
> That'll change the submatrix A[0:2,0:2], and A.
Sorry, of course you're right :)
>>Btw, I don't know how to select _arbitrary_ rows and cols with slicing (hints?).
> You mean, say, the i'th row? That's A[i].
> If you need an arbitrary
> selection of rows, you're out of luck as far as making one matrix
> that's a view of A (but you can make a copy as you did above with take()).
Playing arround with take and put would do it but I don't see a simple MATLAB-like solution with slicing, though.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be
mass produced with unskilled labor. - Wernher von Braun
More information about the SciPy-user