On Fri, January 4, 2008 8:00 pm, Pearu Peterson wrote: > On Fri, January 4, 2008 7:33 pm, Travis E. Oliphant wrote: >> Pearu Peterson wrote: >>> Hi, >>> >>> Say, one defines >>> >>> class A(tuple): >>> def __repr__(self): >>> return 'A(%s)' % (tuple.__repr__(self)) >>> >>> and I'd like to create an array of A instances. >> >> The array function was designed a long time ago to inspect sequences and >> flatten them. >> >> Arguably, there should be more intelligence when an "object" array is >> requested, but there is ambiguity about what the "right" thing to do is. >> >> Thus, the current situation is that if you are creating object arrays, >> the advice is to populate it after the fact. >> >> So, create an empty object array and insert the entries the way you want >> them: >> >> a = np.empty(1,dtype=object) >> a[0] = A((1,2))
> Meantime I was reading arrayobject.c and it seems that > before objects are checked for being sequences, their > __array_interface__ is accessed (eg in Array_FromSequence, > discover_depth). > > Would this provide a solution if the class A would define > a property __array_interface__? I just don't know what > the data field should be for an object. Ok, I found a partial solution: class A(tuple): def __repr__(self): return 'A('+tuple.__repr__(self)+')' @property def __array_interface__(self): import numpy obj = numpy.empty(1,dtype=object) obj[0] = self return obj.__array_interface__.copy() >>> from numpy import * >>> array([A((1,2))]) array([[1, 2]], dtype=object) but >>> array(A((1,2))) array([None], dtype=object) Pearu PS: sorry about previous mail, Send was pressed accidentaly. _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion