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 -- http://mail.python.org/mailman/listinfo/python-list