Thanks Even, <div><br></div><div>I had (sort of) come to that conclusion myself, as I started looking into what blocksize actually meant.  I&#39;ll modify to work in row order.</div><div><br></div><div>Thanks!</div><div><br>
</div><div>Jamie<br><br><div class="gmail_quote">On Fri, Mar 26, 2010 at 2:10 PM, Even Rouault <span dir="ltr">&lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Jamie,<br>
<br>
I&#39;m not sure why it slowdowns after the first 2 bands, but I can say your way<br>
of proceeding is very inefficient and you can achieve the same results by<br>
processing by rows instead of columns. As your input file is scanline<br>
oriented (block size is 20000x1 - which is pretty standard), reading a column<br>
will cause the whole file to be read at each time !<br>
<br>
Try instead the following version which read line by line and horizontally<br>
flip the buffer : it should complete in a few minutes.<br>
<div class="im"><br>
for band in range(1, indataset.RasterCount + 1):<br>
  ## Print the current band<br>
  print &#39;Band %s&#39; % band<br>
<br>
  inband = indataset.GetRasterBand(band)<br>
  outband = outdataset.GetRasterBand(band)<br>
<br>
  count = 0<br>
  print count<br>
<br>
</div>  for i in range(inband.YSize):<br>
<div class="im"><br>
    ## print the current interval of 1k lines<br>
    new_count = int(i / 1000)<br>
    if new_count &gt; count:<br>
      print new_count<br>
      count = new_count<br>
<br>
</div>    inline = inband.ReadAsArray(0, i, inband.XSize, 1)<br>
    flipline = numpy.fliplr(inline)<br>
    outband.WriteArray(flipline, 0, i)<br>
<div class="im"><br>
    inline = None<br>
<br>
  inband = None<br>
  outband = None<br>
<br>
</div>Best regards,<br>
<br>
Even<br>
<br>
Le Friday 26 March 2010 21:22:54 Jamie Adams, vous avez écrit :<br>
<div><div></div><div class="h5">&gt; I&#39;ve written some simple Python code to flip a raster in relation to the<br>
&gt; y-axis.  The raster is 20000x19459 and has 4 bands of type Byte, and is<br>
&gt; written east to west (I have no idea why).  The script proceeds normally<br>
&gt; for the first 2 bands, but slows way down after starting band 3.  I let it<br>
&gt; run overnight, and it had processed less than 1000 columnsin band 3,<br>
&gt; whereas the previous pace for bands 1&amp;2 was around 1000 columns every 10<br>
&gt; seconds.  Here is the relevant code with a few debugging statements<br>
&gt; followed by the gdalinfo output.  The only thing I&#39;m noticing is that the<br>
&gt; input image is INTERLEAVED=BAND whereas the output is INTERLEAVED=PIXEL.<br>
&gt; Any help is appreciated.<br>
&gt;<br>
&gt; ---------------------------------------------------------------------------<br>
&gt;--- for band in range(1, indataset.RasterCount + 1):<br>
&gt;   ## Print the current band<br>
&gt;   print &#39;Band %s&#39; % band<br>
&gt;<br>
&gt;   inband = indataset.GetRasterBand(band)<br>
&gt;   outband = outdataset.GetRasterBand(band)<br>
&gt;<br>
&gt;   count = 0<br>
&gt;   print count<br>
&gt;<br>
&gt;   for i in range(inband.XSize):<br>
&gt;<br>
&gt;     ## print the current interval of 1k lines<br>
&gt;     new_count = int(i / 1000)<br>
&gt;     if new_count &gt; count:<br>
&gt;       print new_count<br>
&gt;       count = new_count<br>
&gt;<br>
&gt;     inline = inband.ReadAsArray(i, 0, 1, inband.YSize)<br>
&gt;<br>
&gt;     outband.WriteArray(inline, inband.XSize - i - 1, 0)<br>
&gt;<br>
&gt;     inline = None<br>
&gt;<br>
&gt;   inband = None<br>
&gt;   outband = None<br>
&gt;<br>
&gt; ---------------------------------------------------------------------------<br>
&gt;--- Driver: GTiff/GeoTIFF<br>
&gt; Files: test.tif<br>
&gt; Size is 20000, 19459<br>
&gt; Coordinate System is:<br>
&gt; GEOGCS[&quot;WGS 84&quot;,<br>
&gt;     DATUM[&quot;WGS_1984&quot;,<br>
&gt;         SPHEROID[&quot;WGS 84&quot;,6378137,298.257223563,<br>
&gt;             AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],<br>
&gt;         AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],<br>
&gt;     PRIMEM[&quot;Greenwich&quot;,0],<br>
&gt;     UNIT[&quot;degree&quot;,0.0174532925199433],<br>
&gt;     AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]]<br>
&gt; Origin = (-175.536864949200321,33.666235092496755)<br>
&gt; Pixel Size = (-0.000062579160220,-0.000054370391310)<br>
&gt; Metadata:<br>
&gt;   AREA_OR_POINT=Area<br>
&gt; Image Structure Metadata:<br>
&gt;   INTERLEAVE=BAND<br>
&gt; Corner Coordinates:<br>
&gt; Upper Left  (-175.5368649,  33.6662351) (175d32&#39;12.71&quot;W, 33d39&#39;58.45&quot;N)<br>
&gt; Lower Left  (-175.5368649,  32.6082416) (175d32&#39;12.71&quot;W, 32d36&#39;29.67&quot;N)<br>
&gt; Upper Right (-176.7884482,  33.6662351) (176d47&#39;18.41&quot;W, 33d39&#39;58.45&quot;N)<br>
&gt; Lower Right (-176.7884482,  32.6082416) (176d47&#39;18.41&quot;W, 32d36&#39;29.67&quot;N)<br>
&gt; Center      (-176.1626566,  33.1372384) (176d 9&#39;45.56&quot;W, 33d 8&#39;14.06&quot;N)<br>
&gt; Band 1 Block=20000x1 Type=Byte, ColorInterp=Red<br>
&gt;   Mask Flags: PER_DATASET ALPHA<br>
&gt; Band 2 Block=20000x1 Type=Byte, ColorInterp=Green<br>
&gt;   Mask Flags: PER_DATASET ALPHA<br>
&gt; Band 3 Block=20000x1 Type=Byte, ColorInterp=Blue<br>
&gt;   Mask Flags: PER_DATASET ALPHA<br>
&gt; Band 4 Block=20000x1 Type=Byte, ColorInterp=Alpha<br>
<br>
<br>
</div></div></blockquote></div><br></div>