[SciPy-User] Matrix indexing and updating

Emanuele Olivetti emanuele@relativita....
Mon Nov 1 17:57:31 CDT 2010


I don't know much about scipy.matrix since I don't use it.
But I guess it is more or less the same. So:
----
In [1]: import numpy as np

In [2]: import scipy as sp

In [3]: mat = sp.matrix(np.arange(100).reshape(10,10))

In [4]: rows = [[1],[3],[4]]

In [5]: columns = [4,5,9]

In [6]: mat[rows,columns]
Out[6]:
matrix([[14, 15, 19],
         [34, 35, 39],
         [44, 45, 49]])

In [7]: mat[rows,columns] += np.arange(9).reshape(3,3)

In [8]: mat[rows,columns]
Out[8]:
matrix([[14, 16, 21],
         [37, 39, 44],
         [50, 52, 57]])

In [9]: mat
Out[9]:
matrix([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
         [10, 11, 12, 13, 14, 16, 16, 17, 18, 21],
         [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
         [30, 31, 32, 33, 37, 39, 36, 37, 38, 44],
         [40, 41, 42, 43, 50, 52, 46, 47, 48, 57],
         [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
         [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
         [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
         [80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
         [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
------

Note the difference between using
     rows = [[1],[3],[4]]
and
     rows = [1,3,4]

Hope this helps,

Emanuele


On 11/01/2010 11:43 AM, Luca Manini wrote:
>>>>>> "Emanuele" == Emanuele Olivetti<emanuele@relativita.com>  writes:
>>>>>>              
>      Emanuele>  Hi Luca, If I understand you problem correctly, maybe
>      Emanuele>  this example can help you:
>
>      It helps a little, but:
>
>      1) you are using numpy.ndarray instead of scipy.matrix.  I have
>         not grasped the difference yet, apart for the annoying fact
>         that a 1xN matrix is not a vector and still has two indices
>         (and that makes the code less "explicit").
>
>         For exmple:
>
>      In [58]: import scipy
>
>      In [59]: v = scipy.matrix(range(5))
>
>      In [60]: v
>      Out[60]: matrix([[0, 1, 2, 3, 4]])
>
>      In [61]: for x in v:
>         ....:        print x
>         ....:
>      [[0 1 2 3 4]]
>
>      In [62]:
>
>      In [63]: z = v.tolist()[0]
>
>      In [64]: z
>      Out[64]: [0, 1, 2, 3, 4]
>
>      In [65]: for x in z:
>         ....:     print x
>         ....:
>         ....:
>      0
>      1
>      2
>      3
>      4
>
>
>      2) you set the submatrix values to 1, but what I need is to "add"
>         to the submatrix the values that come from an (equal sized)
>         matrix.
>
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
>    



More information about the SciPy-User mailing list