[Numpy-discussion] Should the fields in void scalars be available?

Robert Kern robert.kern@gmail....
Fri Jun 27 14:34:40 CDT 2008


On Fri, Jun 27, 2008 at 10:27, Charles R Harris
<charlesr.harris@gmail.com> wrote:
> Question,
>
> In [24]: x = array(('1', u'2'), dtype=[('a', '|S4'), ('b', '<U2')])
>
> In [25]: x.shape
> Out[25]: ()
>
> In [26]: x['a']
> Out[26]:
> array('1',
>       dtype='|S4')
>
> Shouldn't the last be a string?

No.

In [6]: x = array(('1', u'2', 3), dtype=[('a', '|S4'), ('b', '<U2'),
('c', 'i4')])

In [7]: x
Out[7]:
array(('1', u'2', 3),
      dtype=[('a', '|S4'), ('b', '<U2'), ('c', '<i4')])

In [8]: x['c']
Out[8]: array(3)


x is not a scalar. It is a rank-0 array. Picking out a field from it
will also be a rank-0 array. If x were a rank-1 array, picking out a
field from it will give a rank-1 array.

In [12]: y = array([('1', u'2', 3)], dtype=[('a', '|S4'), ('b',
'<U2'), ('c', 'i4')])

In [13]: y['a']
Out[13]:
array(['1'],
      dtype='|S4')

The only inconsistency I can see here is that x.item() gives a tuple
rather than a scalar record. A scalar record does have field access,
but the tuple doesn't.

In [28]: x.item()['a']
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/Users/rkern/bzr/ipython/<ipython console> in <module>()

TypeError: tuple indices must be integers

In [29]: y[0]['a']
Out[29]: '1'


-- 
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


More information about the Numpy-discussion mailing list