将numpy数组按行保存到txt文件中

49

我有一个形式为numpy数组

a = [1,2,3]

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

1 2 3
如果我使用numpy.savetxt,那么我得到的文件将会是这样的:
1
2
3

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


1
你只处理一维数组吗? - Benjamin Bannier
9个回答

53

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

# 注意文件名要用双引号括起来,
# 比如 "filename.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

如果要在文件中添加一个新的相同数组,放在下一行,应该如何打破第一行并继续在第二行? - Palle
1
@PatrikT:如果你有多个一维数组,你可以使用numpy.savetxt(filename,(a,b,c))。它会按行保存。但是它们应该具有相同的大小。 - Avaris
如果例如a比b和c短怎么办?我如何按行保存这3个数组? - Palle
1
@PatrikT:如果你有可变长度的数组,savetxt并不能太有帮助。虽然做到是可能的,但会变得更加丑陋,并且失去本意。就像BioGeek建议的那样,用循环正常地写出它们。我会在我的回答中编辑包括所有这些替代方案。 - Avaris
newline=" "会导致一个尾随分隔符(空格),而一些程序不接受这种方式(必须严格在打印结束时有一个新行,而不是一个空格和一个新行)。 - Serge Rogatch

26

另一种答案是将数组重新塑形,使其具有维度(1, N),如下所示:

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

如果您正在将读数转储到一个文件中,其中每个读数由N个样本组成,那么这正是您所需要的。完美的答案。 - MedoAlmasry

9
import numpy
a = numpy.array([1,2,3])

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

6
我发现被接受的答案中的第一个解决方案对于仍需要换行符的情况有问题。这个问题的最简单解决方案是这样的:
numpy.savetxt(filename, [a], delimiter='\t')

4

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

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

你能解释一下"按行排列的数组"吗? - Cloud Cho

3
import numpy as np

a = [1,2,3]    
b = np.array(a).reshape((1,3))    
np.savetxt('a.txt',b,fmt='%d')

5
虽然这个仅包含代码的答案可能解决了手头的问题,但还需要更多的解释来帮助未来使用该网站的用户理解如何将这个解决方案应用到他们自己的情况中。 - Keyur Potdar
1
请在您的答案中添加一些解释。 - Ryan Schaefer

1
非常简单:

[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')

请注意,方括号内的逗号,内部列表是外部列表的元素。

0

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

fmt:str 或 str 序列,可选
    用于格式化数组中的数字,详见文档

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

newline:str,可选
    分隔行的字符串或字符。

让我们举个例子。我有一个大小为 (M, N) 的数组,其中包含范围在 (0, 255) 内的整数。为了按行保存数组并漂亮地显示它,我们可以使用以下代码:

import numpy as np

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

-1

只是

' '.join(a)

将这个输出写入文件中。

3
在拼接字符串之前,你需要将其转换为字符串类型,否则会出现TypeError: sequence item 0: expected string, numpy.int32 found 的错误。请注意不要改变原意。 - BioGeek
' '.join(str(x) for x in a) - st.ph.n

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