[Numpy-discussion] mrecarray indexing behaviour

Joel Nothman jnothman at student.usyd.edu.au
Sun Apr 7 04:45:13 EDT 2013


Hello all!

I am a bit confused by the behaviour of mrecarray:

>>> import numpy.ma.mrecords
>>> data = [(1, 'a'), (2, 'b')]
>>> ra = numpy.rec.fromrecords(data)
>>> mra = numpy.ma.mrecords.fromrecords(data)
>>> ra
rec.array([(1, 'a'), (2, 'b')],
      dtype=[('f0', '<i4'), ('f1', '|S1')])
>>> mra
masked_records(
    f0 : [1 2]
    f1 : [a b]
    fill_value : (999999, 'N')
              )
>>> for a in [ra, mra]:
...   for cname, cell in [('row first', a[0]['f1']), ('field first',
a['f1'][0])]:
...     print(type(a), cname, cell, type(cell), sep=', ')
...
<class 'numpy.core.records.recarray'>, row first, a, <type 'numpy.string_'>
<class 'numpy.core.records.recarray'>, field first, a, <type
'numpy.string_'>
<class 'numpy.ma.mrecords.MaskedRecords'>, row first, a, <class
'numpy.ma.core.MaskedArray'>
<class 'numpy.ma.mrecords.MaskedRecords'>, field first, a, <type
'numpy.string_'>

Why when I index an mrecarray by offset before field do I get a
zero-dimension MaskedArray instead of the object I get when indexing by
field then offset?

This seems strange behaviour. Is it documented?

It doesn't seem to be tested;
ma/tests/test_mrecords.py:79,87<https://github.com/numpy/numpy/blob/master/numpy/ma/tests/test_mrecords.py#L79>asserts
equality of value but says nothing about the types that should be
returned. Similarly:

>>> mra['f1'][0] == mra[0]['f1']
masked_array(data = True,
             mask = False,
       fill_value = True)

>>> type(mra['f1'][0]) == type(mra[0]['f1'])
False

I look forward to any explanation or clarification!

Thanks,

- Joel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20130407/b965f6f9/attachment.html>


More information about the NumPy-Discussion mailing list