如何从numpy数组中有效地输出每行n个项目

时间:2014-09-23 09:34:45

标签: python arrays performance file-io numpy

我有一个很长的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倍)。我从许多阵列输出许多文件,由于速度不能使用此方法。

有关有效方法进行此输出的任何想法吗?

2 个答案:

答案 0 :(得分: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()))

答案 1 :(得分: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])