Вы можете попробовать решение, подобное этому SO-ответу , чтобы развернуть данные
dtypes = [('name', 'U32'), ('r', float),('m',float)]
a = np.zeros(5, dtype=dtypes)
b = numpy.vstack(map(list, a))
, где вы отображаете список поверх наборов повторного массива, а затем складываете их по вертикали.
Тогда вы можете сделать следующее ...
names = [n for n, t in dtypes]
numpy.savetxt('test.csv', b, header=','.join(names), fmt=','.join(['%s']*b.shape[1]))