Reputation: 189816
I have a pair of numpy arrays; here's a simple equivalent example:
t = np.linspace(0,1,100)
data = ((t % 0.1) * 50).astype(np.uint16)
I want these to be columns in a numpy recarray of dtype f8, i2
. This is the only way I can seem to get what I want:
X = np.array(zip(t,data),dtype=[('t','f8'),('data','i2')])
But is it the right way if my data values are large? I want to minimize the unnecessary overhead of shifting around data.
This seems like it should be an easy problem but I can't find a good example.
Upvotes: 4
Views: 2420
Reputation: 3936
A straight-forward way to do this is with numpy.rec.fromarrays
. In your case:
np.rec.fromarrays([t, data], dtype=[('t','f8'),('data','i2')])
or simply
np.rec.fromarrays([t, data], names='t,data', formats='f8,i2')
would work.
Alternative approaches are also given at Converting a 2D numpy array to a structured array
Upvotes: 10