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
savetxtisn't a member of thearraytype. Did you meannumpy.savetxtthere?