[Numpy-discussion] Speedup creation of a 3-color array from a 2-d color-index array a color lut
Delbert Franz
ddf at iqdotdt.com
Fri Feb 27 00:27:57 EST 2009
I have geotiff files of scanned paper maps that use an indexed color scheme
with a 256-element
color lookup table (color lut) and a 9252 by 7420 array of uint8 elements.
The color is given by
three values. I want to create an array with shape: (9252, 7420, 3) so that
I can display the
image without creating internal array working space in Matplotlib that
exeeds 2^31 bytes.
The following three approaches work in that the correct image is displayed,
but all of them
are waaaaay too slow:)
Let
doq have shape (9252, 7420) and have uint8 elements
ctab have shape (256, 3) and have uint8 elements.
doqq have shape (9252, 7420, 3) and have unit8 elements
#1 The way it would be done in a compiled language, like Fortran where it
would run in a small fraction of
a second instead of several minutes:) But what I want to ultimately
accomplish is hard to do in Fortran!
for i in range(9252):
for j in range(7420):
for k in range(3):
doqq[i,j,k] = ctab[doq[i,j],k]
#2 Try to use some special numpy features:
for i in doq.flat:
doqq.flat = ctab[i,0:3]
#3 Variation of #1
for i in range(9252):
for j in range(7420):
doqq[i,j,] = ctab[doq[i,j],]
All of these use too many element accesses, which are slow. My searching
and reading the
documentation has not given me an approach that avoids these low-level and
slow
(in python/numpy) accesses. I suspect there is a clever way to do this but
as a newbie
I'm having some rough going on getting this process to be much faster.
Thanks,
Delbert Franz
--
View this message in context: http://www.nabble.com/Speedup-creation-of-a-3-color-array-from-a-2-d-color-index-array-a-color-lut-tp22236421p22236421.html
Sent from the Numpy-discussion mailing list archive at Nabble.com.
More information about the NumPy-Discussion
mailing list