[Numpy-discussion] Can't add user defined complex types
Neal Becker
ndbecker2@gmail....
Thu Mar 20 08:13:44 CDT 2008
Travis E. Oliphant wrote:
> Neal Becker wrote:
>> In arrayobject.c, various complex functions (e.g., array_imag_get) use:
>> PyArray_ISCOMPLEX -> PyTypeNum_ISCOMPLEX,
>> which is hard coded to 2 predefined types :(
>>
>> If PyArray_ISCOMPLEX allowed user-defined types, I'm guessing functions
>> such as array_imag_get would just work?
>>
> I don't think that it true. There would need to be some kind of idea
> of "complex-ness" that is tested. One way this could work is if your
> corresponding scalar inherited from the generic complex scalar type and
> then that was tested for.
>
> -Travis O.
One thing that isn't working (so far) is fill:
In [47]: a = array ([cmplx_int32(e) for e in xrange (10)])
In [48]: a
Out[48]: array([(0,0), (1,0), (2,0), (3,0), (4,0), (5,0), (6,0), (7,0), (8,0), (9,0)], dtype=cmplx_int32)
In [49]: r = get_real (a)
In [50]: r
Out[50]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=int32)
In [51]: r[:] = 7
In [52]: a
Out[52]: array([(7,0), (7,0), (7,0), (7,0), (7,0), (7,0), (7,0), (7,0), (7,0), (7,0)], dtype=cmplx_int32)
In [53]: r.fill(8)
In [54]: a
Out[54]: array([(8,8), (8,8), (8,8), (8,8), (8,8), (7,0), (7,0), (7,0), (7,0), (7,0)], dtype=cmplx_int32)
In [55]: r
Out[55]: array([8, 8, 8, 8, 8, 7, 7, 7, 7, 7], dtype=int32)
As you can see, fill only filled 1/2 of the array. slice [:] worked OK.
My get_real is pretty much copied from real:
ret = (PyArrayObject *) \
PyArray_NewFromDescr(self->ob_type,
ret_type,
self->nd,
self->dimensions,
self->strides,
self->data + offset,
self->flags, (PyObject *)self);
More information about the Numpy-discussion
mailing list