[Numpy-discussion] scalar recordarrays

Matthew Koichi Grimes mkg at cs.nyu.edu
Sat Mar 17 18:53:03 EDT 2007


I've found that if I have a record array of shape [] (i.e. a scalar 
recarray), I can't set its fields.

 >>> recarr
recarray((0.0, 0.0, 0.0),
      dtype=[('x', '<f8'), ('dx', '<f8'), ('delta', '<f8')])
 >>> recarr.x[...] = 1.0
TypeError: object does not support item assignment

In the above, recarr.x returned a float "0.0", then attempted the 
assignment "0.0 = 1.0", which raised the TypeError. This is in contrast 
with the behavior of scalar ndarrays, where the above works as expected:

 >>> arr
array(0.0)
 >>> arr[...] = 1.0
 >>> arr
array(1.0)

I this a bug, or is there some reason for this behavior? The obvious 
workaround is reshape a scalar to a size-1 array before setting .x:

 >>>   if recarr.ndim == 0:
....:     recarr.reshape([1]).x[...] = 1.0 else: recarr.x[...] = 1.0
....: else:
....:     recarr.x[...] = 1.0

But this is cumbersome and easy to forget to do.

-- Matt




More information about the NumPy-Discussion mailing list