我有一个很长的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倍)。我从许多阵列输出许多文件,由于速度不能使用此方法。
有关有效方法进行此输出的任何想法吗?
答案 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])