Saving a numpy array with mixed data
io, numpy, python
Solution
Your real problem is that printing out a 1D 8-element array gives you 8 rows of 1 column (or, if you force things, 1 row of 8 columns), not 4 rows of 2 columns. So, you can only specify a single format (or, if you force things, either 1 or 8 formats).
If you want to output this in a 4x2 shape instead of 1x8, you need to reshape the array first:
numpy.savetxt('output.dat', my_array.reshape((4,2)), fmt='%f %i')
This will give you:
0.432432 0
0.943721 1
0.473872 0
0.493273 0
The docs are a little confusing, as they devote most of the wording to dealing with complex numbers instead of simple floats and ints, but the basic rules are the same. You specify either a single specifier, or a specifier for each column (the in-between case of specifying real and imaginary parts for each column isn't relevant).
If you want to write it in 1 row of 8 columns, first you need to reshape it into something with 1 row of 8 columns instead of 8 rows.
And then you need to specify 8 formats. There's no way to tell numpy "repeat these two formats four times", but that's pretty easy to do without numpy's help:
numpy.savetxt('output.dat', my_array.reshape((1,8)), fmt='%f %i ' * 4)
And that gives you:
0.432432 0 0.943721 1 0.473872 0 0.493273 0
Problem
I have a numpy array where every value is a float followed by an integer, e.g.: ``` my_array = numpy.array([0.4324321, 0, 0.9437212, 1, 0.4738721, 0, 0.49327321, 0]) ``` I would like to save it like this: ``` 0.4324321 0 0.9437212 1 0.4738721 0 0.49327321 0 ``` But if I call: ``` numpy.savetxt('output.dat',my_array,fmt='%f %i') ``` I get an error: ``` AttributeError: fmt has wrong number of % formats. %f %i ``` How can I fix this?