# How to construct matrix from vectors? Classic List Threaded 8 messages Open this post in threaded view
|

## How to construct matrix from vectors?

 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.htmGiven 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: (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
Open this post in threaded view
|

## How to construct matrix from vectors?

 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: (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]]) >>>
Open this post in threaded view
|

## How to construct matrix from vectors?

 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: 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
Open this post in threaded view
|

## How to construct matrix from vectors?

 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: > 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: array([[ 1,  4],         [ 2,  5],         [ 3,  6],         [ 7, 10],         [ 8, 11],         [ 9, 12]]) There are way too many '(([[]]))' things  in Python :)
Open this post in threaded view
|

## How to construct matrix from vectors?

 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
Open this post in threaded view
|

## How to construct matrix from vectors?

 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: > 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]])