2012-03-05 32 views
21

Tôi có một mảng NumPy hình thứcTiết kiệm mảng NumPy để txt hàng tập khôn ngoan

a = [1,2,3] 

mà tôi muốn lưu vào một file .txt như vậy mà các tập tin trông giống như:

1 2 3 

Nếu Tôi sử dụng numpy.savetxt sau đó tôi nhận được một tệp như:

1 
2 
3 

Có một giải pháp dễ dàng cho điều này tôi cho rằng, bất kỳ đề xuất nào?

+1

Hoặc bạn chỉ xử lý mảng 1D? –

Trả lời

25

Nếu numpy >= 1.5, bạn có thể làm:

# note that the filename is enclosed with double quotes,
# example "filename.txt"

numpy.savetxt("filename", a, newline=" ") 

Sửa

nhiều mảng 1D với cùng một chiều dài

a = numpy.array([1,2,3]) 
b = numpy.array([4,5,6]) 
numpy.savetxt(filename, (a,b), fmt="%d") 

# gives: 
# 1 2 3 
# 4 5 6 

nhiều 1D mảng với chiều dài biến

a = numpy.array([1,2,3]) 
b = numpy.array([4,5]) 

with open(filename,"w") as f: 
    f.write("\n".join(" ".join(map(str, x)) for x in (a,b))) 

# gives: 
# 1 2 3 
# 4 5 
+0

Điều gì sẽ xảy ra nếu một mảng giống hệt mới được thêm vào tệp, ở hàng tiếp theo. Làm thế nào để phá vỡ dòng đầu tiên và tiếp tục trên dòng thứ hai? – Palle

+1

@PatrikT: Nếu bạn có nhiều hơn một mảng 1D, bạn chỉ có thể thực hiện 'numpy.savetxt (tên tệp, (a, b, c))'. Nó giúp tiết kiệm hàng khôn ngoan. Nhưng họ nên có cùng kích thước. – Avaris

+0

Điều gì xảy ra nếu ví dụ: a ngắn hơn b và c? Làm cách nào để lưu 3 hàng mảng này một cách khôn ngoan? – Palle

-1

chỉ

' '.join(a) 

và viết ra này vào một tập tin.

+3

Điều đó sẽ cung cấp cho một 'TypeError: chuỗi mục 0: chuỗi dự kiến, numpy.int32 tìm thấy', vì vậy trước tiên bạn phải chuyển đổi thành chuỗi trước khi tham gia. – BioGeek

+0

'' .join (str (x) cho x trong a) –

5
import numpy 
a = numpy.array([1,2,3]) 

with open(r'test.txt', 'w') as f: 
    f.write(" ".join(map(str, a))) 
11

Một câu trả lời khác là định hình lại mảng để nó có kích thước (1, N) như vậy:

savetext(filename, a.reshape(1, a.shape[0])) 
1

tôi thấy rằng giải pháp đầu tiên trong câu trả lời chấp nhận được vấn đề đối với các trường hợp nơi yêu cầu ký tự dòng mới. Giải pháp dễ nhất cho vấn đề là làm điều này:

numpy.savetxt(filename, [a], delimiter='\t') 
Các vấn đề liên quan