2014-09-23 80 views
3

我有一個非常長的一維numpy數組。我想高效地將它寫入文件,在文件中每行放置N個空格分隔的值。我嘗試了幾種方法,但都有很大的問題。如何從numpy數組中有效地輸出每行n項

首先,我嘗試將數組重新整形爲N列寬。給定一個文件句柄,f:

myArray.reshape(-1, N) 
for row in myArray: 
    print >> f, " ".join(str(val) for val in row) 

這很有效,但要求數組有N個元素的倍數。如果最後一行只包含1個元素(而N大於1),我只想打印1個元素......不會崩潰。

接下來,我試圖用一個計數器進行打印,和每一個第N個元素之後插入一個換行符:

i = 1 
for val in myArray: 
    if i < N: 
     print >> f, str(val)+" ", 
     i+=1 
    else: 
     print >> f, str(val) 
     i = 1 

這工作得很好任何長度的數組,但極其緩慢(服用比我長至少10倍第一選項)。我從許多數組中輸出很多文件,並且由於速度而無法使用此方法。

任何有效的方法來做這個輸出的想法?

回答

1
for i in range(0, len(myArray), N): 
    print " ".join([str(v) for v in myArray[i:i+N]]) 
    # or this 
    # print " ".join(map(str, myArray[i:i+N].tolist())) 
0

您可以添加一個try/except您整形的方法來打印最後的元素到輸出文件:

myArray.reshape(-1, N) 
try: 
    for row in myArray: 
     print >> f, " ".join(str(val) for val in row) 
except: # add the exact type of error here to be on the save side 
    # just print the last (incomplete) row 
    print >> f, " ".join(str(val) for val in myArray[-1]) 
相關問題