<div class="gmail_quote">On 1 October 2012 22:04, Bala subramanian <span dir="ltr"><<a href="mailto:bala.biophysics@gmail.com" target="_blank">bala.biophysics@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Friends,<br>
I have an 1d array like a=[1, 1, 2, 2, 2, 3, 3, 1, 1, 1], i have to<br>
convert it to 2d array for plotting as follows. The 2d array is filled<br>
by a[colum index] to obtain the new array shown below.<br>
<br>
[ [ 1.,  1.,  0.,  0.,  0.,  0.,  0.,  1.,  1.,  1.],<br>
  [ 0.,  0.,  2.,  2.,  2.,  0.,  0.,  0.,  0.,  0.],<br>
  [ 0.,  0.,  0.,  0.,  0.,  3.,  3.,  0.,  0.,  0.] ]<br>
<br>
I wrote the following simple code for the conversion. However i guess<br>
there should be more fancy/speeder way to do that. Also i need to<br>
create such 2d-array from larger 1d arrays of size 20000,30000 items<br>
etc. Hence i would like to request hints for a better code for the<br>
purpose.<br>
<br>
Here no. rows in my case is always = no. of discrete values in array a.<br>
<br>
>>>my=1<br>
>>>for i in range(3):<br>
>>>      for j in range(10):<br>
>>>             if a[j] == my : b[i,j]=my<br>
>>>             else: b[i,j]=0<br>
>>>      my +=1<br></blockquote><div><br></div><div>Instead of</div><div><br></div><div>my = 1</div><div>for i in range(3):</div><div>   # stuff</div><div>   my += 1</div><div><br></div><div>why not do</div><div>
<br></div><div>for my in range(1, 4):</div><div>    # stuff</div><div><br></div><div>But actually it makes more sense to eliminate one of the loops and do:</div><div><br></div><div>for i, ai in enumerate(a):</div><div>    b[i, ai] = ai</div>
<div><br></div><div>It may be that you get better speed with something like</div><div><br></div><div>for j in range(max(a.max)):</div><div>    b[j, a==j+1] = j</div><div><br></div><div>Oscar</div></div>