[Numpy-discussion] convert array to tuples?
Christopher Barker
Chris.Barker at noaa.gov
Tue Apr 5 15:35:24 EDT 2011
On 4/5/11 10:52 AM, Sebastian Haase wrote:
> How about fixing PIL... I know that there is not a good track record
> of getting patches into PIL ,
> but did you get to the bottom of it and find how draw.line is implemented?
no. I haven't. And yes adapting PIL to use the buffer interface for this
kind of thing would be great. I also have wanted to do that for
wxPython, where it would be welcome, but still haven't gotten around to it.
> BTW, is it drawing anti-aliased lines ?
Not with the ImageDraw module, but there is a new AggDraw module that
should be more pretty.
On 4/5/11 11:49 AM, Mark S Niemczyk wrote:
> Just a suggestion (I am very new to Numpy), but wouldn't
>
> draw.line(tuple(points.tolist()))
>
> accomplish what you want.
nope, tolist() creates a list of lists -- tuple() only converts the
outer list to a tuple, which I why I did the list comprehension.
On 4/5/11 10:53 AM, josef.pktd at gmail.com wrote:
> does a structured dtype work?
Good idea -- I'll give it a try -- indeed it does:
dt = np.dtype([('x', np.int32),('y',np.int32)])
draw.line(points.view(dtype=dt).reshape((-1,)).tolist(),
fill="rgb(0,255,0)", width=4)
but it's not any faster, alas.
The fastest I've come up with is putting the elements in a single 1-d
list. PIL can take either a sequence of tuples:
[(x,y),(x,y),...]
or the flattened version:
[x,y,x,y,x,y,x,y,...]
So this is the fastest:
draw.line(points.flatten().tolist(), fill="rgb(0,255,0)", width=4)
Thanks all,
-Chris
--
Christopher Barker, Ph.D.
Oceanographer
Emergency Response Division
NOAA/NOS/OR&R (206) 526-6959 voice
7600 Sand Point Way NE (206) 526-6329 fax
Seattle, WA 98115 (206) 526-6317 main reception
Chris.Barker at noaa.gov
More information about the NumPy-Discussion
mailing list