
On Fri, May 13, 2011 at 3:11 PM, Derek Homeier <derek@astro.physik.uni-goettingen.de> 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, josef.pktd@gmail.com wrote:
On Fri, May 13, 2011 at 10:58 AM, Bruce Southey <bsouthey@gmail.com> 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 NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion