簡體   English   中英

如何從numpy數組中有效地輸出每行n個項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM