【问题标题】:How to efficiently output n items per line from numpy array如何从 numpy 数组中有效地输出每行 n 项
【发布时间】:2014-09-23 09:34:44
【问题描述】:

我有一个相当长的一维 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 个元素...而不是崩溃。

接下来,我尝试使用计数器打印,并在每个第 N 个元素后插入一个换行符:

i = 1
for val in myArray:
    if i < N:
        print >> f, str(val)+" ",
        i+=1
    else:
        print >> f, str(val)
        i = 1

这适用于任何长度的数组,但速度极慢(至少比我的第一个选项长 10 倍)。我正在从许多数组中输出许多文件,由于速度原因无法使用此方法。

有什么想法可以有效地进行此输出吗?

【问题讨论】:

    标签: python arrays performance file-io numpy


    【解决方案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()))
    

    【讨论】:

      【解决方案2】:

      您可以在重塑方法中添加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])
      

      【讨论】:

        猜你喜欢
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        相关资源
        最近更新 更多