On Fri, May 13, 2011 at 3:11 PM, Derek Homeier <[email protected]> wrote: > Hi, > > just a comment since I first thought the solution below might not be > what Bruce > was looking for, but having realised it's probably what he's been > asking for... > > On 13 May 2011, at 17:20, [email protected] wrote: > >> On Fri, May 13, 2011 at 10:58 AM, Bruce Southey <[email protected]> >> wrote: >>> Hi, >>> How do you create a 'single' structured array using np.array()? >>> Basically I am attempting to do something like this that does not >>> work: >>> a=np.array([1,2, 3,4, 5,6], dtype=np.dtype([('foo', int)])) >>> >>> I realize that this is essentially redundant as if A is an 1-d array >>> then a structured array with a named field 'foo' is the same thing >>> - A >>> would be A['foo'], just shorter. > ... >> >> Using a view works, (and direct assignment of dtype) >> >>>>> a=np.array([1,2, 3,4, 5,6]).view(([('foo', int)])) >>>>> a >> array([(1,), (2,), (3,), (4,), (5,), (6,)], >> dtype=[('foo', '<i4')]) >>>>> b = a.copy() >>>>> b >> array([(1,), (2,), (3,), (4,), (5,), (6,)], >> dtype=[('foo', '<i4')]) >> >> >>>>> a1 = np.array([1,2, 3,4, 5,6]).astype([('foo', int)]) >> >> Traceback (most recent call last): >> File "<pyshell#36>", line 1, in <module> >> a1 = np.array([1,2, 3,4, 5,6]).astype([('foo', int)]) >> TypeError: expected a readable buffer object >> >>>>> a1 = np.array([1,2, 3,4, 5,6]) >>>>> a1.dtype >> dtype('int32') >>>>> a1.dtype = np.dtype([('foo', int)]) >>>>> a1 >> array([(1,), (2,), (3,), (4,), (5,), (6,)], >> dtype=[('foo', '<i4')]) > > This is a 1-d structured array, yet a is in fact not the same as > a['foo']: > > >>> a['foo'] > array([ 1, 2, 3, 4, 5, 6]) > >>> a['foo'].shape > (6,) > >>> a.shape > (6,) > >>> a['foo']+np.arange(6) > array([ 1, 3, 5, 7, 9, 11]) > >>> a+np.arange(6) > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and > 'numpy.ndarray'
funny things with subclasses, I saw this also in an error message in another package with a subclass of ndarray, should read: 'this ndarray-(sub)class' and 'that ndarray-(sub)class' for some messages it's just getting used to the "coding" "TypeError: expected a readable buffer object" translates into "I cannot interpret the data as the desired array" e.g. list of list or list of tuples > >>> a[0]+1 > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: unsupported operand type(s) for +: 'numpy.void' and 'int' > > Thus I am wondering why broadcasting should not be possible in this > case, Even a 1 column table is still a table (or a list of records), and a 1 item row is still a row. Josef > and if it really isn't, the first error message certainly is not very > helpful... (maybe > inevitably though, since type() of a structured array is the same as > for a "plain" > array (unlike for a record array). > > Cheers, > Derek > > _______________________________________________ > NumPy-Discussion mailing list > [email protected] > http://mail.scipy.org/mailman/listinfo/numpy-discussion > _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
