[英]How to efficiently output n items per line from numpy array
我有一個很長的1-D 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倍)。 我從許多陣列輸出許多文件,由於速度不能使用此方法。
有沒有想過有效的方法來做這個輸出?
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()))
您可以在重新整形方法中添加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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.