A Thursday 02 July 2009 20:15:13 Dan Yamins escrigué: > > What's wrong with recarrays? In any case, if you need a true ndarray > > object > > you can always do: > > > > ndarr = recarr.view(np.ndarray) > > > > and you are done. > > I have a question about this though. The object "ndarr" will consist of > "records", e.g.: > > In [96]: type(ndarr[0]) > Out[96]: <class 'numpy.core.records.record'> > > If ndarr had been defined directly via ndarray constructors, then you'd > get: > > In [99]: type(ndarr[0]) > Out[99]: <type 'numpy.void'> > > I guess this might not be such a big deal. But what is the difference > between the "record" class nad the "void" class? Does this matter for > anything at all?
The most apparent difference is that the record class implements accessors to fields as attributes: In [17]: b = np.rec.array([(1,2.,'abc')], 'i4,f8,S3') In [18]: b[0] Out[18]: (1, 2.0, 'abc') In [19]: b[0].f0 Out[19]: 1 In [20]: b[0].f2 Out[20]: 'abc' while void type does not: In [15]: a = np.array([(1,2.,'abc')], 'i4,f8,S3') In [21]: a[0].f0 --------------------------------------------------------------------------- AttributeError: 'numpy.void' object has no attribute 'f0' and you must make use of __getitem__() instead: In [22]: a[0]['f0'] Out[22]: 1 In [23]: a[0]['f2'] Out[23]: 'abc' Cheers, -- Francesc Alted _______________________________________________ Numpy-discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
