Quantcast

How to construct matrix from vectors?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to construct matrix from vectors?

Nasser M. Abbasi
I just started to learn some python today for first time,
so be easy on me.

I am having some trouble figuring how do the problem shown in this link

http://12000.org/my_notes/mma_matlab_control/KERNEL/KEse44.htm

Given 4 column vectors, v1,v2,v3,v4, each is 3 rows.

I want to use these to construct matrix mat, which is

       [[v1,v2],
        [v3,v4]]

So the resulting matrix is as shown in the link.  i.e.
it will be 6 rows and 2 columns.

This is what I tried:

import numpy as np
v1=np.array([1,2,3]);
v2=np.array([4,5,6]);
v3=np.array([7,8,9]);
v4=np.array([10,11,12]);

And now I get stuck, I tried

m=np.array([[v1,v2],[v3,v4]])  #no good

Also

m=np.array([v1,v2,v3,v4])
m.shape
    Out[153]: (4L, 3L)
m.T

array([[ 1,  4,  7, 10],
        [ 2,  5,  8, 11],
        [ 3,  6,  9, 12]])

Not what I want.

I need to get the shape as in the above link, 6 rows by 2 columns,
where each column vector is stacked as shown.  I also tried

v1=np.array([1,2,3]); v1.shape=3,1
v2=np.array([4,5,6]); v2.shape=3,1
v3=np.array([7,8,9]); v3.shape=3,1
v4=np.array([10,11,12]); v4.shape=3,1
mat=np.array([[v1,v2],[v3,v4]])

What is the correct way to do this in Python?

thanks,
--Nasser

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to construct matrix from vectors?

MRAB-2
On 2015-06-21 02:57, Nasser M. Abbasi wrote:

> I just started to learn some python today for first time,
> so be easy on me.
>
> I am having some trouble figuring how do the problem shown in this link
>
> http://12000.org/my_notes/mma_matlab_control/KERNEL/KEse44.htm
>
> Given 4 column vectors, v1,v2,v3,v4, each is 3 rows.
>
> I want to use these to construct matrix mat, which is
>
>         [[v1,v2],
>          [v3,v4]]
>
> So the resulting matrix is as shown in the link.  i.e.
> it will be 6 rows and 2 columns.
>
> This is what I tried:
>
> import numpy as np
> v1=np.array([1,2,3]);
> v2=np.array([4,5,6]);
> v3=np.array([7,8,9]);
> v4=np.array([10,11,12]);
>
> And now I get stuck, I tried
>
> m=np.array([[v1,v2],[v3,v4]])  #no good
>
> Also
>
> m=np.array([v1,v2,v3,v4])
> m.shape
>      Out[153]: (4L, 3L)
> m.T
>
> array([[ 1,  4,  7, 10],
>          [ 2,  5,  8, 11],
>          [ 3,  6,  9, 12]])
>
> Not what I want.
>
> I need to get the shape as in the above link, 6 rows by 2 columns,
> where each column vector is stacked as shown.  I also tried
>
> v1=np.array([1,2,3]); v1.shape=3,1
> v2=np.array([4,5,6]); v2.shape=3,1
> v3=np.array([7,8,9]); v3.shape=3,1
> v4=np.array([10,11,12]); v4.shape=3,1
> mat=np.array([[v1,v2],[v3,v4]])
>
> What is the correct way to do this in Python?
>
Here's one way, one step at a time:

>>> r1 = np.concatenate([v1, v2])
>>> r1
array([1, 2, 3, 4, 5, 6])
>>> r2 = np.concatenate([v3, v4])
>>> r2
array([ 7,  8,  9, 10, 11, 12])
>>> m = np.array([r1, r2])
>>> m
array([[ 1,  2,  3,  4,  5,  6],
        [ 7,  8,  9, 10, 11, 12]])
>>> m.transpose()
array([[ 1,  7],
        [ 2,  8],
        [ 3,  9],
        [ 4, 10],
        [ 5, 11],
        [ 6, 12]])
>>>


Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to construct matrix from vectors?

Nasser M. Abbasi
In reply to this post by Nasser M. Abbasi
On 6/20/2015 9:20 PM, MRAB wrote:

> Here's one way, one step at a time:
>
>>>> r1 = np.concatenate([v1, v2])
>>>> r1
> array([1, 2, 3, 4, 5, 6])
>>>> r2 = np.concatenate([v3, v4])
>>>> r2
> array([ 7,  8,  9, 10, 11, 12])
>>>> m = np.array([r1, r2])
>>>> m
> array([[ 1,  2,  3,  4,  5,  6],
>          [ 7,  8,  9, 10, 11, 12]])
>>>> m.transpose()
> array([[ 1,  7],
>          [ 2,  8],
>          [ 3,  9],
>          [ 4, 10],
>          [ 5, 11],
>          [ 6, 12]])
>>>>
>

But your output is wrong.

I did manage to find a way:

---------------------------------
r1 =np.hstack([(v1,v2)]).T
r2 =np.hstack([(v3,v4)]).T
mat = np.vstack((r1,r2))
-----------------------------

Out[211]:
array([[ 1,  4],
        [ 2,  5],
        [ 3,  6],
        [ 7, 10],
        [ 8, 11],
        [ 9, 12]])

But it is not as intuitive as with Matlab, where one can just write

-------------------------------
   v1=[1,2,3]'; v2=[4,5,6]';
   v3=[7,8,9]'; v4=[10,11,12]';
   m=[v1 v2;v3 v4]
-------------------------------

--Nasser




Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to construct matrix from vectors?

Nasser M. Abbasi
On 6/20/2015 10:47 PM, Nasser M. Abbasi wrote:

> I did manage to find a way:
>
> ---------------------------------
> r1 =np.hstack([(v1,v2)]).T
> r2 =np.hstack([(v3,v4)]).T
> mat = np.vstack((r1,r2))
> -----------------------------
>
> Out[211]:
> array([[ 1,  4],
>          [ 2,  5],
>          [ 3,  6],
>          [ 7, 10],
>          [ 8, 11],
>          [ 9, 12]])
>
> But it is not as intuitive as with Matlab, where one can just write
>
> -------------------------------
>     v1=[1,2,3]'; v2=[4,5,6]';
>     v3=[7,8,9]'; v4=[10,11,12]';
>     m=[v1 v2;v3 v4]
> -------------------------------

Here is a way a little closer to Matlab's method: First
make all the vectors column vectors

v1=np.array([(1,2,3)]).T
v2=np.array([(4,5,6)]).T
v3=np.array([(7,8,9)]).T
v4=np.array([(10,11,12)]).T

mat =np.hstack(( np.vstack((v1,v3)), np.vstack((v2,v4))) )

Out[236]:
array([[ 1,  4],
        [ 2,  5],
        [ 3,  6],
        [ 7, 10],
        [ 8, 11],
        [ 9, 12]])

There are way too many '(([[]]))' things  in Python :)



Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to construct matrix from vectors?

Mark Lawrence
In reply to this post by Nasser M. Abbasi
On 21/06/2015 04:47, Nasser M. Abbasi wrote:

>
> But it is not as intuitive as with Matlab
>

For those of us who don't know would you be kind enough to do a cost
comparison of Matlab vs Python licenses?

--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence


Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to construct matrix from vectors?

Fabien
In reply to this post by Nasser M. Abbasi
On 06/21/2015 07:21 AM, Nasser M. Abbasi wrote:

> v1=np.array([(1,2,3)]).T
> v2=np.array([(4,5,6)]).T
> v3=np.array([(7,8,9)]).T
> v4=np.array([(10,11,12)]).T
>
> mat =np.hstack(( np.vstack((v1,v3)), np.vstack((v2,v4))) )
>
> Out[236]:
> array([[ 1,  4],
>         [ 2,  5],
>         [ 3,  6],
>         [ 7, 10],
>         [ 8, 11],
>         [ 9, 12]])
>
> There are way too many '(([[]]))' things  in Python :)

another solution with less "(([[]]))", and less ";". There are way too
many ";" in Matlab ;)

import numpy as np
v1 = [1, 2, 3]
v2 = [4, 5, 6]
v3 = [7, 8, 9]
v4 = [10, 11, 12]
np.hstack([[v1, v2], [v3, v4]]).T
Out[]:
array([[ 1,  4],
        [ 2,  5],
        [ 3,  6],
        [ 7, 10],
        [ 8, 11],
        [ 9, 12]])


Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to construct matrix from vectors?

Dave Farrance-2
Fabien <fabien.maussion at gmail.com> wrote:

>another solution with less "(([[]]))", and less ";". There are way too
>many ";" in Matlab ;)
>
>import numpy as np
>v1 = [1, 2, 3]
>v2 = [4, 5, 6]
>v3 = [7, 8, 9]
>v4 = [10, 11, 12]
>np.hstack([[v1, v2], [v3, v4]]).T
>Out[]:
>array([[ 1,  4],
>        [ 2,  5],
>        [ 3,  6],
>        [ 7, 10],
>        [ 8, 11],
>        [ 9, 12]])

Neat. And if the OP wants "vectors" in np array form to start with, and
to stack them together without transposing at that point, he could do it
like this:

>>> v1=np.vstack([1,2,3])
>>> v2=np.vstack([4,5,6])
>>> v3=np.vstack([7,8,9])
>>> v4=np.vstack([10,11,12])
>>> np.r_[np.c_[v1,v2],np.c_[v3,v4]]
array([[ 1,  4],
       [ 2,  5],
       [ 3,  6],
       [ 7, 10],
       [ 8, 11],
       [ 9, 12]])

And since he seems to want a Matlab-like environment, then the somewhat
depreciated pylab was intended to dump a Matlab-like set of functions
into the namespace, which is OK for an interactive environment, an not
too much of a problem for a short program in a single module. Probably
best to do that with iPython, though.

>>> from matplotlib.pylab import *
>>> v1=vstack([1,2,3])
>>> v2=vstack([4,5,6])
>>> v3=vstack([7,8,9])
>>> v4=vstack([10,11,12])
>>> r_[c_[v1,v2],c_[v3,v4]]
array([[ 1,  4],
       [ 2,  5],
       [ 3,  6],
       [ 7, 10],
       [ 8, 11],
       [ 9, 12]])


Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

How to construct matrix from vectors?

Anul
In reply to this post by Mark Lawrence
On Sunday, 21 June 2015 20:43:15 UTC+5:30, Dennis Lee Bieber  wrote:

> On Sun, 21 Jun 2015 09:32:55 +0100, Mark Lawrence declaimed the following:
>
> >On 21/06/2015 04:47, Nasser M. Abbasi wrote:
> >
> >>
> >> But it is not as intuitive as with Matlab
> >>
> >
> >For those of us who don't know would you be kind enough to do a cost
> >comparison of Matlab vs Python licenses?
>
> Or even Matlab vs Octave

Well if its a parentheses minimization contest, APL will beat the pants of everything.

Heres a web-session at http://baruchel.hd.free.fr/apps/apl/

   v1 ? 1 2 3
   v2 ? 4 5 6
   v3 ? 7 8 9
   v4 ? 10 11 12
   v1
1 2 3

# We need to reshape (?)
   v1 ? 3 1? v1
   v1
1
2
3
# Likewise
   v2 ? 3 1? v2
   v3 ? 3 1? v3
   v4 ? 3 1? v4
   v1,v2
1 4
2 5
3 6

# So we need to catenate in a different dimension

   v1?v2
1
2
3
4
5
6

#Likewise
   v3?v4
 7
 8
 9
10
11
12

# Thats the only parentheses used
   (v1?v2),(v3?v4)
1  7
2  8
3  9
4 10
5 11
6 12


# And we dont even need all these
   (v1?v2),v3?v4
1  7
2  8
3  9
4 10
5 11
6 12

Loading...