On 05/13/2011 03:04 PM, [email protected] wrote: > 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 Thanks for the replies, especially the dtype example Josef!
So this should be reported as a bug? Bruce _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
