[Numpy-discussion] Behavior from a change in dtype?
Skipper Seabold
jsseabold@gmail....
Mon Sep 7 19:01:18 CDT 2009
On Mon, Sep 7, 2009 at 7:35 PM, <josef.pktd@gmail.com> wrote:
> On Mon, Sep 7, 2009 at 6:36 PM, Skipper Seabold<jsseabold@gmail.com> wrote:
>> Hello all,
>>
>> I ran into a problem with some of my older code (since figured out the
>> user error). However, in trying to give a simple example that
>> replicates the problem I was having, I ran into this.
>>
>> In [19]: a = np.array((1.))
>>
>> In [20]: a
>> Out[20]: array(1.0)
>>
>> # the dtype is 'float64'
>>
>> In [21]: a.dtype='<i8'
>
> The way I understand it is:
> Here you are telling numpy to interpret the existing memory/data in a
> different way, which might make sense or not depending on the types,
> e.g. I also used this to switch between structured arrays and regular
> arrays with compatible memory. However it does not convert the data.
>
> If you want to convert the data to a different type, numpy needs to
> create a new array, e.g. with astype
>
>>>> a = np.array((1.))
>>>> b = a.astype('<i8')
>>>> b
> array(1L, dtype=int64)
>
> Josef
>
Hmm, okay, well I came across this in trying to create a recarray like
data2 below, so I guess I should just combine the two questions. Is
the last example the best way to do what I'm trying to do (taken from
an old thread)? I would like to add a few more examples of best
practice here <http://docs.scipy.org/doc/numpy/user/basics.rec.html>,
so I don't need to go looking again.
import numpy as np
data = np.array([[10.75, 1, 1],[10.39, 0, 1],[18.18, 0, 1]])
dt = np.dtype([('var1', '<f8'), ('var2', '<i8'), ('var3', '<i8')])
data2 = data.copy()
data3 = data.copy()
# Doesn't work, raises TypeError: expected a readable buffer object
data2 = data2.view(np.recarray)
data2.astype(dt)
# Works without error (?) with unexpected result
data3 = data3.view(np.recarray)
data3.dtype = dt
# One correct (though IMHO) unintuitive way
data = np.rec.fromarrays(data.swapaxes(1,0), dtype=dt)
Skipper
More information about the NumPy-Discussion
mailing list