【问题标题】:Saving numpy array to txt file row wise将numpy数组逐行保存到txt文件
【发布时间】:2012-03-22 20:28:00
【问题描述】:

我有一个 numpy 表单数组

a = [1,2,3]

我想将其保存到 .txt 文件中,使文件看起来像:

1 2 3

如果我使用 numpy.savetxt,那么我会得到一个类似的文件:

1
2
3

我想应该有一个简单的解决方案,有什么建议吗?

【问题讨论】:

  • 或者你只处理一维数组?

标签: python numpy save


【解决方案1】:

如果numpy >= 1.5,你可以这样做:

#注意文件名用双引号括起来,
# 示例“文件名.txt”

numpy.savetxt("filename", a, newline=" ")

编辑

几个长度相同的一维数组

a = numpy.array([1,2,3])
b = numpy.array([4,5,6])
numpy.savetxt(filename, (a,b), fmt="%d")

# gives:
# 1 2 3
# 4 5 6

几个可变长度的一维数组

a = numpy.array([1,2,3])
b = numpy.array([4,5])

with open(filename,"w") as f:
    f.write("\n".join(" ".join(map(str, x)) for x in (a,b)))

# gives:
# 1 2 3
# 4 5

【讨论】:

  • 如果要在下一行将新的相同数组添加到文件中怎么办。如何将第一行换行并在第二行继续?
  • @PatrikT:如果您有多个一维数组,您可以使用numpy.savetxt(filename,(a,b,c))。它节省了行。但它们应该具有相同的大小。
  • 如果a 比 b 和 c 短?如何按行保存这 3 个数组?
  • @PatrikT:如果您有可变长度数组,savetxt 并没有多大帮助。这是可能的,但它变得更丑陋并且超出了我认为的目的。只需按照循环中建议的BioGeek 正常编写它们即可。我将编辑我的答案以包括所有这些替代方案。
【解决方案2】:

另一种答案是重塑数组,使其具有(1, N) 的尺寸,如下所示:

savetext(filename, a.reshape(1, a.shape[0]))

【讨论】:

  • 如果您将读数转储到每个读数由 N 个样本组成的文件中,这正是您所需要的。完美的答案。
【解决方案3】:
import numpy
a = numpy.array([1,2,3])

with open(r'test.txt', 'w') as f:
    f.write(" ".join(map(str, a)))

【讨论】:

    【解决方案4】:

    我发现接受答案中的第一个解决方案对于仍需要换行符的情况存在问题。解决问题的最简单方法是这样做:

    numpy.savetxt(filename, [a], delimiter='\t')
    

    【讨论】:

      【解决方案5】:
      import numpy as np
      
      a = [1,2,3]    
      b = np.array(a).reshape((1,3))    
      np.savetxt('a.txt',b,fmt='%d')
      

      【讨论】:

      • 虽然这个纯代码的答案可能会解决手头的问题,但需要更多的解释来帮助网站的未来用户了解如何将此解决方案应用于他们的情况。
      • 请在您的回答中添加一些解释
      【解决方案6】:

      我知道这是旧的,但这些答案都没有解决 numpy 没有按行保存数组的根本问题。我发现这一个班轮对我有用:

      b = np.matrix(a)
      np.savetxt("file", b)
      

      【讨论】:

        【解决方案7】:

        非常非常简单: [1,2,3]

        列表就像一列。

        1
        2
        3
        

        如果你想要一个像一排这样的列表,双排:

        [[1, 2, 3]]  --->    1, 2, 3
        

        [[1, 2, 3], [4, 5, 6]]  ---> 1, 2, 3
                                     4, 5, 6
        

        最后:

        np.savetxt("file", [['r1c1', 'r1c2'], ['r2c1', 'r2c2']], delimiter=';', fmt='%s')
        

        注意,方括号之间的逗号,内列表是外列表的元素

        【讨论】:

          【解决方案8】:

          numpy.savetxt() 方法有几个值得注意的参数:

          fmt : str 或 str 序列,可选
          它用于格式化数组中的数字,格式化的详细信息请参见文档

          分隔符:str,可选
          字符串或字符分隔列

          换行符:str,可选
          字符串或字符分隔线。

          让我们举个例子。我有一个大小为 (M, N) 的数组,它由 (0, 255) 范围内的整数组成。要按行保存数组并很好地显示它,我们可以使用以下代码:

          import numpy as np
          
          np.savetxt("my_array.txt", my_array, fmt="%4d", delimiter=",", newline="\n")
          

          【讨论】:

            【解决方案9】:

            只是

            ' '.join(a)
            

            并将此输出写入文件。

            【讨论】:

            • 那会给出一个TypeError: sequence item 0: expected string, numpy.int32 found,所以在加入之前必须先转换成字符串。
            • ' '.join(str(x) for x in a)
            猜你喜欢
            • 2018-12-15
            • 1970-01-01
            • 1970-01-01
            • 2017-07-13
            • 1970-01-01
            • 1970-01-01
            • 2016-06-21
            • 2018-01-01
            • 2017-01-20
            相关资源
            最近更新 更多