Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #31343 > unrolled thread

numpy - 2D matrix/array - initialization like in Matlab...

Started bysomeone <newsboost@gmail.com>
First post2012-10-15 23:09 +0200
Last post2012-10-15 14:52 -0700
Articles 6 — 4 participants

Back to article view | Back to comp.lang.python


Contents

  numpy - 2D matrix/array - initialization like in Matlab... someone <newsboost@gmail.com> - 2012-10-15 23:09 +0200
    Re: numpy - 2D matrix/array - initialization like in Matlab... MRAB <python@mrabarnett.plus.com> - 2012-10-15 22:26 +0100
      Re: numpy - 2D matrix/array - initialization like in Matlab... someone <newsboost@gmail.com> - 2012-10-16 00:42 +0200
        Re: numpy - 2D matrix/array - initialization like in Matlab... Marco Nawijn <nawijn@gmail.com> - 2012-10-16 03:34 -0700
        Re: numpy - 2D matrix/array - initialization like in Matlab... Marco Nawijn <nawijn@gmail.com> - 2012-10-16 03:34 -0700
    Re: numpy - 2D matrix/array - initialization like in Matlab... Emile van Sebille <emile@fenx.com> - 2012-10-15 14:52 -0700

#31343 — numpy - 2D matrix/array - initialization like in Matlab...

Fromsomeone <newsboost@gmail.com>
Date2012-10-15 23:09 +0200
Subjectnumpy - 2D matrix/array - initialization like in Matlab...
Message-ID<k5hu2e$h5i$1@dont-email.me>
See this:

==========================================================
In [5]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 1.5')

In [6]: Dx
Out[6]:
matrix([[ 1. ,  0. ,  0. ],
         [ 0. ,  0.5, -0.5],
         [ 0. , -0.5,  1.5]])
==========================================================



Ok... So now test = 33 and instead of the value 1.5 I want to use the 
value of "test" and put it directly into the matrix (or array):

==========================================================
In [7]: test=33

In [8]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/home/user/something/<ipython-input-8-5a43575649e1> in <module>()
----> 1 Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')

/usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.pyc in 
__new__(subtype, data, dtype, copy)
     252
     253         if isinstance(data, str):
--> 254             data = _convert_from_string(data)
     255
     256         # now convert data to an array
...... etc...
==========================================================



So obviously it doesn't understand that I want this:

==========================================================
In [21]: Dx[2,2]=test

In [22]: Dx
Out[22]:
matrix([[  1. ,   0. ,   0. ],
         [  0. ,  33. ,  -0.5],
         [  0. ,  -0.5,  33. ]])
==========================================================

Without having to manually change all the individual places using my 
variables (test is actually many variables, not just one but I think you 
should understand the problem now).


How to initialize my array directly using variables ?

It could also be that I wanted:

test11 = 1
test12 = 1.5
test13 = 2
test21 = 0
test22 = 5

Dx = numpy.matrix('test11 test12 test13; test21 test22 -0.5; 0 -0.5 1.5')

Etc... for many variables...

Appreciate ANY help, thank you very much!

[toc] | [next] | [standalone]


#31344

FromMRAB <python@mrabarnett.plus.com>
Date2012-10-15 22:26 +0100
Message-ID<mailman.2241.1350336380.27098.python-list@python.org>
In reply to#31343
On 2012-10-15 22:09, someone wrote:
>
> See this:
>
> ==========================================================
> In [5]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 1.5')
>
> In [6]: Dx
> Out[6]:
> matrix([[ 1. ,  0. ,  0. ],
>           [ 0. ,  0.5, -0.5],
>           [ 0. , -0.5,  1.5]])
> ==========================================================
>
>
>
> Ok... So now test = 33 and instead of the value 1.5 I want to use the
> value of "test" and put it directly into the matrix (or array):
>
> ==========================================================
> In [7]: test=33
>
> In [8]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
> ---------------------------------------------------------------------------
> NameError                                 Traceback (most recent call last)
> /home/user/something/<ipython-input-8-5a43575649e1> in <module>()
> ----> 1 Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
>
> /usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.pyc in
> __new__(subtype, data, dtype, copy)
>       252
>       253         if isinstance(data, str):
> --> 254             data = _convert_from_string(data)
>       255
>       256         # now convert data to an array
> ...... etc...
> ==========================================================
>
>
>
> So obviously it doesn't understand that I want this:
>
> ==========================================================
> In [21]: Dx[2,2]=test
>
> In [22]: Dx
> Out[22]:
> matrix([[  1. ,   0. ,   0. ],
>           [  0. ,  33. ,  -0.5],
>           [  0. ,  -0.5,  33. ]])
> ==========================================================
>
> Without having to manually change all the individual places using my
> variables (test is actually many variables, not just one but I think you
> should understand the problem now).
>
>
> How to initialize my array directly using variables ?
>
> It could also be that I wanted:
>
> test11 = 1
> test12 = 1.5
> test13 = 2
> test21 = 0
> test22 = 5
>
> Dx = numpy.matrix('test11 test12 test13; test21 test22 -0.5; 0 -0.5 1.5')
>
> Etc... for many variables...
>
> Appreciate ANY help, thank you very much!
>
What it prints should give you a hint:

 >>> Dx = numpy.matrix([[test11, test12, test13], [test21, test22, 
-0.5], [0, -0.5, 1.5]])
 >>> Dx
matrix([[ 1. ,  1.5,  2. ],
         [ 0. ,  5. , -0.5],
         [ 0. , -0.5,  1.5]])

[toc] | [prev] | [next] | [standalone]


#31347

Fromsomeone <newsboost@gmail.com>
Date2012-10-16 00:42 +0200
Message-ID<mailman.2245.1350340959.27098.python-list@python.org>
In reply to#31344
On 10/15/2012 11:26 PM, MRAB wrote:
> On 2012-10-15 22:09, someone wrote:
>>
>> See this:
>>
>> ==========================================================
>> In [5]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 1.5')
>>
>> In [6]: Dx
>> Out[6]:
>> matrix([[ 1. ,  0. ,  0. ],
>>           [ 0. ,  0.5, -0.5],
>>           [ 0. , -0.5,  1.5]])
>> ==========================================================
>>
>>
>>
>> Ok... So now test = 33 and instead of the value 1.5 I want to use the
>> value of "test" and put it directly into the matrix (or array):
>>
>> ==========================================================
>> In [7]: test=33
>>
>> In [8]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
>> ---------------------------------------------------------------------------
>>
>> NameError                                 Traceback (most recent call
>> last)
>> /home/user/something/<ipython-input-8-5a43575649e1> in <module>()
>> ----> 1 Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
>>
>> /usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.pyc in
>> __new__(subtype, data, dtype, copy)
>>       252
>>       253         if isinstance(data, str):
>> --> 254             data = _convert_from_string(data)
>>       255
>>       256         # now convert data to an array
>> ...... etc...
>> ==========================================================
>>
>>
>>
>> So obviously it doesn't understand that I want this:
>>
>> ==========================================================
>> In [21]: Dx[2,2]=test
>>
>> In [22]: Dx
>> Out[22]:
>> matrix([[  1. ,   0. ,   0. ],
>>           [  0. ,  33. ,  -0.5],
>>           [  0. ,  -0.5,  33. ]])
>> ==========================================================
>>
>> Without having to manually change all the individual places using my
>> variables (test is actually many variables, not just one but I think you
>> should understand the problem now).
>>
>>
>> How to initialize my array directly using variables ?
>>
>> It could also be that I wanted:
>>
>> test11 = 1
>> test12 = 1.5
>> test13 = 2
>> test21 = 0
>> test22 = 5
>>
>> Dx = numpy.matrix('test11 test12 test13; test21 test22 -0.5; 0 -0.5 1.5')
>>
>> Etc... for many variables...
>>
>> Appreciate ANY help, thank you very much!
>>
> What it prints should give you a hint:
>
>  >>> Dx = numpy.matrix([[test11, test12, test13], [test21, test22,
> -0.5], [0, -0.5, 1.5]])
>  >>> Dx
> matrix([[ 1. ,  1.5,  2. ],
>          [ 0. ,  5. , -0.5],
>          [ 0. , -0.5,  1.5]])

Uh, great - thank you very much!

As you maybe see, I'm only a python newbie so I'm not so good at 
understanding the error messages and reading the source code yet.

Thank you very much for the solution to the problem! It's highly 
appreciated. Thanks.

[toc] | [prev] | [next] | [standalone]


#31382

FromMarco Nawijn <nawijn@gmail.com>
Date2012-10-16 03:34 -0700
Message-ID<12844532-43d7-4acf-8fac-0a3a6c5faf6d@googlegroups.com>
In reply to#31347
On Tuesday, October 16, 2012 12:43:09 AM UTC+2, someone wrote:
> On 10/15/2012 11:26 PM, MRAB wrote:
> 
> > On 2012-10-15 22:09, someone wrote:
> 
> >>
> 
> >> See this:
> 
> >>
> 
> >> ==========================================================
> 
> >> In [5]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 1.5')
> 
> >>
> 
> >> In [6]: Dx
> 
> >> Out[6]:
> 
> >> matrix([[ 1. ,  0. ,  0. ],
> 
> >>           [ 0. ,  0.5, -0.5],
> 
> >>           [ 0. , -0.5,  1.5]])
> 
> >> ==========================================================
> 
> >>
> 
> >>
> 
> >>
> 
> >> Ok... So now test = 33 and instead of the value 1.5 I want to use the
> 
> >> value of "test" and put it directly into the matrix (or array):
> 
> >>
> 
> >> ==========================================================
> 
> >> In [7]: test=33
> 
> >>
> 
> >> In [8]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
> 
> >> ---------------------------------------------------------------------------
> 
> >>
> 
> >> NameError                                 Traceback (most recent call
> 
> >> last)
> 
> >> /home/user/something/<ipython-input-8-5a43575649e1> in <module>()
> 
> >> ----> 1 Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
> 
> >>
> 
> >> /usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.pyc in
> 
> >> __new__(subtype, data, dtype, copy)
> 
> >>       252
> 
> >>       253         if isinstance(data, str):
> 
> >> --> 254             data = _convert_from_string(data)
> 
> >>       255
> 
> >>       256         # now convert data to an array
> 
> >> ...... etc...
> 
> >> ==========================================================
> 
> >>
> 
> >>
> 
> >>
> 
> >> So obviously it doesn't understand that I want this:
> 
> >>
> 
> >> ==========================================================
> 
> >> In [21]: Dx[2,2]=test
> 
> >>
> 
> >> In [22]: Dx
> 
> >> Out[22]:
> 
> >> matrix([[  1. ,   0. ,   0. ],
> 
> >>           [  0. ,  33. ,  -0.5],
> 
> >>           [  0. ,  -0.5,  33. ]])
> 
> >> ==========================================================
> 
> >>
> 
> >> Without having to manually change all the individual places using my
> 
> >> variables (test is actually many variables, not just one but I think you
> 
> >> should understand the problem now).
> 
> >>
> 
> >>
> 
> >> How to initialize my array directly using variables ?
> 
> >>
> 
> >> It could also be that I wanted:
> 
> >>
> 
> >> test11 = 1
> 
> >> test12 = 1.5
> 
> >> test13 = 2
> 
> >> test21 = 0
> 
> >> test22 = 5
> 
> >>
> 
> >> Dx = numpy.matrix('test11 test12 test13; test21 test22 -0.5; 0 -0.5 1.5')
> 
> >>
> 
> >> Etc... for many variables...
> 
> >>
> 
> >> Appreciate ANY help, thank you very much!
> 
> >>
> 
> > What it prints should give you a hint:
> 
> >
> 
> >  >>> Dx = numpy.matrix([[test11, test12, test13], [test21, test22,
> 
> > -0.5], [0, -0.5, 1.5]])
> 
> >  >>> Dx
> 
> > matrix([[ 1. ,  1.5,  2. ],
> 
> >          [ 0. ,  5. , -0.5],
> 
> >          [ 0. , -0.5,  1.5]])
> 
> 
> 
> Uh, great - thank you very much!
> 
> 
> 
> As you maybe see, I'm only a python newbie so I'm not so good at 
> 
> understanding the error messages and reading the source code yet.
> 
> 
> 
> Thank you very much for the solution to the problem! It's highly 
> 
> appreciated. Thanks.

Hi,

Also note that you don't need to initialize the array with a string. You could directly do it like this:

>>> a = numpy.array(((1,2,3), (2,3,4), (4,5,6)))

Other things that might be interesting for you are:

# List comprehension (standard python) to convert strings to floats
>>> vals = [ float(s) for s in "1.0 2.3 1.2".split() ]
produces [1.0, 2.3, 1.2]
>>> vals = [ float(s) for s in ("1.0", "2.3", "1.2") ]
produces again [1.0, 2.3, 1.2]

Also lookup the documentation for numpy.reshape. With this you could provide a single list of for example 9 numbers and reshape it into a 3x3 array.

Python and Numpy are so cool!!

Marco

[toc] | [prev] | [next] | [standalone]


#31383

FromMarco Nawijn <nawijn@gmail.com>
Date2012-10-16 03:34 -0700
Message-ID<mailman.2262.1350383688.27098.python-list@python.org>
In reply to#31347
On Tuesday, October 16, 2012 12:43:09 AM UTC+2, someone wrote:
> On 10/15/2012 11:26 PM, MRAB wrote:
> 
> > On 2012-10-15 22:09, someone wrote:
> 
> >>
> 
> >> See this:
> 
> >>
> 
> >> ==========================================================
> 
> >> In [5]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 1.5')
> 
> >>
> 
> >> In [6]: Dx
> 
> >> Out[6]:
> 
> >> matrix([[ 1. ,  0. ,  0. ],
> 
> >>           [ 0. ,  0.5, -0.5],
> 
> >>           [ 0. , -0.5,  1.5]])
> 
> >> ==========================================================
> 
> >>
> 
> >>
> 
> >>
> 
> >> Ok... So now test = 33 and instead of the value 1.5 I want to use the
> 
> >> value of "test" and put it directly into the matrix (or array):
> 
> >>
> 
> >> ==========================================================
> 
> >> In [7]: test=33
> 
> >>
> 
> >> In [8]: Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
> 
> >> ---------------------------------------------------------------------------
> 
> >>
> 
> >> NameError                                 Traceback (most recent call
> 
> >> last)
> 
> >> /home/user/something/<ipython-input-8-5a43575649e1> in <module>()
> 
> >> ----> 1 Dx = numpy.matrix('1 0 0; 0 0.5 -0.5; 0 -0.5 test')
> 
> >>
> 
> >> /usr/lib/python2.7/dist-packages/numpy/matrixlib/defmatrix.pyc in
> 
> >> __new__(subtype, data, dtype, copy)
> 
> >>       252
> 
> >>       253         if isinstance(data, str):
> 
> >> --> 254             data = _convert_from_string(data)
> 
> >>       255
> 
> >>       256         # now convert data to an array
> 
> >> ...... etc...
> 
> >> ==========================================================
> 
> >>
> 
> >>
> 
> >>
> 
> >> So obviously it doesn't understand that I want this:
> 
> >>
> 
> >> ==========================================================
> 
> >> In [21]: Dx[2,2]=test
> 
> >>
> 
> >> In [22]: Dx
> 
> >> Out[22]:
> 
> >> matrix([[  1. ,   0. ,   0. ],
> 
> >>           [  0. ,  33. ,  -0.5],
> 
> >>           [  0. ,  -0.5,  33. ]])
> 
> >> ==========================================================
> 
> >>
> 
> >> Without having to manually change all the individual places using my
> 
> >> variables (test is actually many variables, not just one but I think you
> 
> >> should understand the problem now).
> 
> >>
> 
> >>
> 
> >> How to initialize my array directly using variables ?
> 
> >>
> 
> >> It could also be that I wanted:
> 
> >>
> 
> >> test11 = 1
> 
> >> test12 = 1.5
> 
> >> test13 = 2
> 
> >> test21 = 0
> 
> >> test22 = 5
> 
> >>
> 
> >> Dx = numpy.matrix('test11 test12 test13; test21 test22 -0.5; 0 -0.5 1.5')
> 
> >>
> 
> >> Etc... for many variables...
> 
> >>
> 
> >> Appreciate ANY help, thank you very much!
> 
> >>
> 
> > What it prints should give you a hint:
> 
> >
> 
> >  >>> Dx = numpy.matrix([[test11, test12, test13], [test21, test22,
> 
> > -0.5], [0, -0.5, 1.5]])
> 
> >  >>> Dx
> 
> > matrix([[ 1. ,  1.5,  2. ],
> 
> >          [ 0. ,  5. , -0.5],
> 
> >          [ 0. , -0.5,  1.5]])
> 
> 
> 
> Uh, great - thank you very much!
> 
> 
> 
> As you maybe see, I'm only a python newbie so I'm not so good at 
> 
> understanding the error messages and reading the source code yet.
> 
> 
> 
> Thank you very much for the solution to the problem! It's highly 
> 
> appreciated. Thanks.

Hi,

Also note that you don't need to initialize the array with a string. You could directly do it like this:

>>> a = numpy.array(((1,2,3), (2,3,4), (4,5,6)))

Other things that might be interesting for you are:

# List comprehension (standard python) to convert strings to floats
>>> vals = [ float(s) for s in "1.0 2.3 1.2".split() ]
produces [1.0, 2.3, 1.2]
>>> vals = [ float(s) for s in ("1.0", "2.3", "1.2") ]
produces again [1.0, 2.3, 1.2]

Also lookup the documentation for numpy.reshape. With this you could provide a single list of for example 9 numbers and reshape it into a 3x3 array.

Python and Numpy are so cool!!

Marco

[toc] | [prev] | [next] | [standalone]


#31345

FromEmile van Sebille <emile@fenx.com>
Date2012-10-15 14:52 -0700
Message-ID<mailman.2243.1350337892.27098.python-list@python.org>
In reply to#31343
someone wrote:
> How to initialize my array directly using variables ?
> 
> It could also be that I wanted:
> 
> test11 = 1
> test12 = 1.5
> test13 = 2
> test21 = 0
> test22 = 5
> 
> Dx = numpy.matrix('test11 test12 test13; test21 test22 -0.5; 0 -0.5 1.5')
> 
> Etc... for many variables...
> 
> Appreciate ANY help, thank you very much!

You could use string interpolation:

Dx = numpy.matrix('%s %s %s; %s %s -0.5; 0 -0.5 1.5'
               % (test11 test12 test13 test21 test22))


Emile

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web