Numeric + wxPython, can't understand a bug...

Robert Kern robert.kern at gmail.com
Sat Apr 28 00:40:45 EDT 2007


John Ladasky wrote:
> Hi, folks,
> 
> This probably has to do with Numeric and not with wxPython, but I
> mention both for completeness.
> 
> My OS: Win2000
> Python: 2.3.4
> wx: 2.6.1.0, Unicode version
> Numeric: 23.8
> 
> 
> Here's the minimal code:
> ================================================
> 
> height = 50
> width = 60
> L = []
> for y in range(height):
>     for x in range(width):
>         L.append(wx.Point(3+(2*x+y%2)*4, 3+7*y))
> print width, height, len(L)
> pos = reshape(array(L), (height, width))
> 
> 
> 
> And here's the output:
> ================================================
> 
> 60 50 3000
> 
> pos = reshape(array(L), (height, width))
> ValueError: total size of new array must be unchanged
> 
> 
> 
> I've used exactly this approach to create 2D arrays from lists of
> numbers, with no problems.  Why does this fail with wx.Point objects?
> Why is it telling me that I'm changing the array size, when the
> dimensions indicate that I am NOT?  Typecasting the array as
> containing PyObject items does not change the error message...

wx.Point objects are being recognized as sequences by array(). Consequently,
reshape() thinks you are trying to reshape a (height*width, 2) array into a
(height, width) array. You might want to create an empty (height, width)
PyObject array first, and simply assign wx.Point values into it. That bypasses
array()'s attempt at intuiting the structure of the list.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco




More information about the Python-list mailing list