2009-10-09 2 views
5

Может кто-нибудь указать, что я делаю неправильно здесь?python numpy savetxt

import numpy as np 

a = np.array([1,2,3,4,5],dtype=int) 
b = np.array(['a','b','c','d','e'],dtype='|S1') 

np.savetxt('test.txt',zip(a,b),fmt="%i %s") 

Выхода:

Traceback (most recent call last): 
    File "loadtxt.py", line 6, in <module> 
    np.savetxt('test.txt',zip(a,b),fmt="%i %s") 
    File "/Users/tom/Library/Python/2.6/site-packages/numpy/lib/io.py", line 785, in savetxt 
    fh.write(format % tuple(row) + '\n') 
TypeError: %d format: a number is required, not numpy.string_ 

ответ

12

Вы должны построить вам массив по-разному:

z = np.array(zip([1,2,3,4,5], ['a','b','c','d','e']), dtype=[('int', int), ('str', '|S1')]) 
np.savetxt('test.txt', z, fmt='%i %s') 

когда вы передаете последовательность , savetext выполняет asarray(sequence) call и результирующий массив имеет тип |S4, то есть все элементы являются строками! поэтому вы видите эту ошибку.

1

Я думаю, что проблема, которую вы испытываете, что вы передаете кортежи через строку форматирования и она не может интерпретировать кортеж% я. Попробуйте использовать FMT = «% S», предполагая, что это то, что вы ищете в качестве выхода:

1 a 
2 b 
3 c 
4 d 
5 e 
+0

это просто неправильно. 'fmt ="% s "' работает по совершенно другим причинам, 'fmt ="% s% s "' работает тоже, кстати. – SilentGhost

+0

Вы правы, как только я опубликовал, я понял, что это сработало, но не по той причине, о которой я думал. Виноват. Сообщение от SilentGhost намного лучше. Благодарю. – dwelch

4

Если вы хотите сохранить CSV файл, который вы также можете использовать функцию rec2csv (входит в matplotlib.mlab)

>>> from matplotlib.mlab import rec2csv 
>>> rec = array([(1.0, 2), (3.0, 4)], dtype=[('x', float), ('y', int)]) 
>>> rec = array(zip([1,2,3,4,5], ['a','b','c','d','e']), dtype=[('x', int), ('y', str)]) 
>>> rec2csv(rec, 'recordfile.txt', delimiter=' ') 

, надеюсь, разработчики в один прекрасный день pylab будет осуществлять достойную поддержку файлов CSV письма.

Смежные вопросы