[Numpy-discussion] some question on new dtype

N. Volbers mithrandir42 at web.de
Wed Jan 25 12:08:02 EST 2006


Thanks for your quick answer!

>> 1) When reading the sample chapter from Travis' documentation, I 
>> noticed that there is also a type 'object' with the character 'O'. So 
>> I kind of hoped that it would be possible to have arbitrary python 
>> objects in an array. However, when I add a fourth "column" of type 
>> 'O', then numpy will mem-fault. Is this not allowed or is this some 
>> implementation bug?
>
>
> It's a bug if it seg-faults, that should be allowed.  Please post your 
> code so we can track it down.

Attachment 1 contains  a four-liner that reproduces the segfault. But 
maybe there is something wrong on my system, because I also get the 
following message when importing numpy: "import linalg -> failed: 
/usr/lib/python2.4/site-packages/numpy/linalg/lapack_lite.so: undefined 
symbol: s_wsfe"

I removed numpy, checked out from SVN, re-installed and the error is 
still there.

Regarding my question about changing dtypes: Your sample code...

> new = dict(a.dtype.fields) # get a writeable dictionary.
> new['<newname>'] = new['<oldname>']
> del new['<oldname>']
> del new[-1]  # get rid of the special ordering entry
> a.dtype = dtype(new)
>
... is short and exactly what I asked for.

>>
>> 3) When I use two identical entries in the names part of the dtype, I 
>> get the message 'TypeError: expected a readable buffer object'. It 
>> makes sense that it is not allowed to have two identical names, but I 
>> think the error message should be worded more descriptive.
>
>
> Yeah, we ought to check for this.  Could you post your code that 
> raises this error.

It seems you have already fixed the error message for the case in which 
you have two identical names for dtype entries. Man, you are fast! 
But... ;-) you forgot the situation described in my second code 
attachment, which is the following situation:

 >>> dtype = numpy.dtype( [('name', 'S30'), ('name', 'i2')] )
 >>> a = numpy.zeros( (4,), dtype=dtype)

This works, but leads to silly results. The last instance of 'name' 
determines the field type, i.e. a[0] = ('Niklas', 1) is invalid, while 
a[0] = (1,1) is valid!

>> 4) In the example above, printing any of the strings via 'print' will 
>> yield the characters and then the characters up to the string size 
>> filled up with \x00, e.g.
>>
>>  u'Bill\x00\x00\x00\x00\x00\x00\x00.... (30 characters total)'
>>
>> Why doesn't 'prin't terminate the output when the first \x00 is reached ?
>

Thanks for your bug-fix. Unicode display works now.


Best regards,

Niklas Volbers.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dtype_test_1.py
Type: text/x-python
Size: 98 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20060125/6970b5ea/attachment.py>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dtype_test_2.py
Type: text/x-python
Size: 484 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20060125/6970b5ea/attachment-0001.py>


More information about the NumPy-Discussion mailing list