# How to construct matrix from vectors?

 Classic List Threaded
8 messages
Reply | Threaded
Open this post in threaded view
|
Report Content as Inappropriate

## 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[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?

 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?

 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?

 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?

 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?

 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?

 Fabien 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?

 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...