[Numpy-discussion] Question about dtype
Valentin Haenel
valentin at haenel.co
Fri Dec 12 18:22:37 EST 2014
Dear Nathaniel,
thanks very much for your response.
* Nathaniel Smith <njs at pobox.com> [2014-12-11]:
> On Wed, Dec 10, 2014 at 8:26 PM, Valentin Haenel <valentin at haenel.co> wrote:
> > I am using numpy version 1.9.0 and Python 2.7.9 and have a question
> > about the dtype:
> >
> > In [14]: np.dtype("<f8")
> > Out[14]: dtype('float64')
> >
> > In [15]: np.dtype(u"<f8")
> > Out[15]: dtype('float64')
> >
> > In [16]: np.dtype([("<f8", "<f8")])
> > Out[16]: dtype([('<f8', '<f8')])
> >
> > So far so good. Now what happens if I use unicode?
> >
> > In [17]: np.dtype([(u"<f8", "<f8")])
> > ---------------------------------------------------------------------------
> > TypeError Traceback (most recent call
> > last)
> > <ipython-input-17-ce004acab7f5> in <module>()
> > ----> 1 np.dtype([(u"<f8", "<f8")])
> >
> > TypeError: data type not understood
>
> Yep, looks like a bug to me. (I guess this is particularly relevant
> when __future__.unicode_literals is in effect.)
If you could point me in the approximate direction, I'll give it a
shot. (my best guess would be numpy/core/_internal.py)
> > Also, it really does need to be a tuple?
> >
> > In [18]: np.dtype([["<f8", "<f8"]])
> > ---------------------------------------------------------------------------
> > TypeError Traceback (most recent call
> > last)
> > <ipython-input-18-c82761d7306d> in <module>()
> > ----> 1 np.dtype([["<f8", "<f8"]])
> >
> > TypeError: data type not understood
>
> Lists and tuples are both valid inputs to np.dtype, but they're
> interpreted differently -- the problem here isn't that you used a
> list, it's that if you use a list then numpy expects different
> contents. See:
> http://docs.scipy.org/doc/numpy/user/basics.rec.html
Ok, let me ask a different question---to give you some perspective of what
I actually need. I'm trying to roundtrip a dtype through JSON and I'm
having some trouble since the tuples are converted into lists( hence my
example above.) Those then can't be converted into a dtype instance
anymore... The utf-8 thing above is also part of the Problem since JSON
gives back unicode objects for strings, but should
probably be fixed upstream (i.e. in numpy).
Here is how far I get:
In [2]: import json
The following goes in
In [3]: dt = [("<f8", "<f8")]
In [4]: inst = np.dtype(dt)
In [5]: inst
Out[5]: dtype([('<f8', '<f8')])
In [6]: jd = json.dumps(dt)
In [7]: dtud = json.loads(jd)
And this is what comes back out:
In [8]: dtud
Out[8]: [[u'<f8', u'<f8']]
In [9]: jd
Out[9]: '[["<f8", "<f8"]]'
In [10]: inst.descr
Out[10]: [('<f8', '<f8')]
In [11]: np.dtype(dtud)
---------------------------------------------------------------------------
TypeError Traceback (most recent call
last)
<ipython-input-11-85f434de7ebe> in <module>()
----> 1 np.dtype(dtud)
TypeError: data type not understood
Maybe there is a better way to roundtrip a dtype through JSON? Perhaps
this is a known and solved problem?
best,
V-
More information about the NumPy-Discussion
mailing list