[SciPy-user] Masked arrays with dtype=object: elements get wrapped in 0D arrays
Pierre GM
pgmdevlist at gmail.com
Tue Jan 9 12:22:12 EST 2007
> Is this a bug, or am I understanding something wrong?
Not really. Well, I don't know whether it should be a bug or not.
When you set an element `i` of masked array `a` to a value `val`, you actually
call the function "filled" on the value to set the `_data` part of `a`. This
function returns a numpy.array no matter what: `numpy.array(val)`. So, when
you type
a[0]=0
you actually have
a[0] = numpy.array(0)
Which explains what you see.
If `a` has a classic dtype such as int_, float_..., `numpy.array(val)` is
transformed into a single element (int_, float_...), to fit the memory size
reserved for an array cell.
In your case, `a` is a object_ array: there's no transformation, as the memory
size of an object_ array cell can be modified.
Now, should 'filled' always return a numpy.array ? That's the case where we
wouldn't want this conversion, and an extra test could be added in `filled`,
along the lines of:
...
if isinstance(val,int) or isinstance(val,float) or isisinstance(val,complex)
or isinstance(val,str):
return val
else:
return numpy.array(val)
That extra test will be costly in the long run: 'filled' is called quite often
w/ maskedarrays.
At the same time, we could just return `val` no matter what (as long it's not
a masked array). I gonna try to check whether it breaks anything.
In the meanwhile: what are you trying to do ? There should be some kind of
workaround.
More information about the SciPy-User
mailing list