如何从numpy数组中高效地每行输出n个元素

4
我有一个很长的一维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个回答

3
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])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接