2009-10-09 24 views
5

Ai đó có thể cho biết tôi đang làm gì sai ở đây?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") 

Đầu ra là:

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_ 

Trả lời

12

Bạn cần phải tạo ra cho bạn mảng khác nhau:

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') 

khi bạn đang đi qua một chuỗi , savetext thực hiện asarray(sequence) call và mảng kết quả là loại |S4, đó là tất cả các thành phần là chuỗi! đó là lý do bạn thấy lỗi này.

1

Tôi nghĩ vấn đề bạn đang gặp là bạn đang đi qua các bộ thông qua các chuỗi formating và nó không thể giải thích các tuple với% i. Hãy thử sử dụng fmt = "% s", giả sử đây là những gì bạn đang tìm kiếm là kết quả:

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

điều đó sai. 'fmt ="% s "' hoạt động vì các lý do hoàn toàn khác nhau, 'fmt ="% s% s "' cũng hoạt động, btw. – SilentGhost

+0

Bạn nói đúng, ngay sau khi tôi đăng, tôi nhận ra nó hoạt động, nhưng không phải vì lý do tôi nghĩ. Lỗi của tôi. Bài đăng của SilentGhost tốt hơn nhiều. Cảm ơn. – dwelch

4

Nếu bạn muốn lưu tập tin CSV bạn cũng có thể sử dụng chức năng rec2csv (bao gồm trong 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=' ') 

hy vọng, các nhà phát triển một ngày pylab sẽ thực hiện một sự hỗ trợ phong nha để file csv bằng văn bản.

Các vấn đề liên quan