Python NumPy Savetxt - PullRequest
       17

Python NumPy Savetxt

5 голосов
/ 09 октября 2009

Может кто-нибудь указать, что я здесь не так делаю?

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_

Ответы [ 3 ]

12 голосов
/ 09 октября 2009

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

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, то есть все элементы являются строками! вот почему вы видите эту ошибку.

4 голосов
/ 09 октября 2009

Если вы хотите сохранить файл 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-файлов.

1 голос
/ 09 октября 2009

Думаю, проблема в том, что вы пропускаете кортежи через форматирующую строку, и она не может интерпретировать кортеж с помощью% i. Попробуйте использовать fmt = "% s", предполагая, что это то, что вы ищете в качестве вывода:

1 a
2 b
3 c
4 d
5 e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...