[Tutor] 1d to 2d array creation

Oscar Benjamin oscar.j.benjamin at gmail.com
Tue Oct 2 00:27:39 CEST 2012


On 1 October 2012 22:04, Bala subramanian <bala.biophysics at gmail.com> wrote:

> Friends,
> I have an 1d array like a=[1, 1, 2, 2, 2, 3, 3, 1, 1, 1], i have to
> convert it to 2d array for plotting as follows. The 2d array is filled
> by a[colum index] to obtain the new array shown below.
>
> [ [ 1.,  1.,  0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.],
>   [ 0.,  0.,  2.,  2.,  2.,  0.,  0.,  0.,  0.,  0.],
>   [ 0.,  0.,  0.,  0.,  0.,  3.,  3.,  0.,  0.,  0.] ]
>
> I wrote the following simple code for the conversion. However i guess
> there should be more fancy/speeder way to do that. Also i need to
> create such 2d-array from larger 1d arrays of size 20000,30000 items
> etc. Hence i would like to request hints for a better code for the
> purpose.
>
> Here no. rows in my case is always = no. of discrete values in array a.
>
> >>>my=1
> >>>for i in range(3):
> >>>      for j in range(10):
> >>>             if a[j] == my : b[i,j]=my
> >>>             else: b[i,j]=0
> >>>      my +=1
>

Instead of

my = 1
for i in range(3):
   # stuff
   my += 1

why not do

for my in range(1, 4):
    # stuff

But actually it makes more sense to eliminate one of the loops and do:

for i, ai in enumerate(a):
    b[i, ai] = ai

It may be that you get better speed with something like

for j in range(max(a.max)):
    b[j, a==j+1] = j

Oscar
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20121001/313a11d9/attachment.html>


More information about the Tutor mailing list