【发布时间】:2012-03-22 20:28:00
【问题描述】:
我有一个 numpy 表单数组
a = [1,2,3]
我想将其保存到 .txt 文件中,使文件看起来像:
1 2 3
如果我使用 numpy.savetxt,那么我会得到一个类似的文件:
1
2
3
我想应该有一个简单的解决方案,有什么建议吗?
【问题讨论】:
-
或者你只处理一维数组?
我有一个 numpy 表单数组
a = [1,2,3]
我想将其保存到 .txt 文件中,使文件看起来像:
1 2 3
如果我使用 numpy.savetxt,那么我会得到一个类似的文件:
1
2
3
我想应该有一个简单的解决方案,有什么建议吗?
【问题讨论】:
如果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
【讨论】:
numpy.savetxt(filename,(a,b,c))。它节省了行。但它们应该具有相同的大小。
savetxt 并没有多大帮助。这是可能的,但它变得更丑陋并且超出了我认为的目的。只需按照循环中建议的BioGeek 正常编写它们即可。我将编辑我的答案以包括所有这些替代方案。
另一种答案是重塑数组,使其具有(1, N) 的尺寸,如下所示:
savetext(filename, a.reshape(1, a.shape[0]))
【讨论】:
import numpy
a = numpy.array([1,2,3])
with open(r'test.txt', 'w') as f:
f.write(" ".join(map(str, a)))
【讨论】:
我发现接受答案中的第一个解决方案对于仍需要换行符的情况存在问题。解决问题的最简单方法是这样做:
numpy.savetxt(filename, [a], delimiter='\t')
【讨论】:
import numpy as np
a = [1,2,3]
b = np.array(a).reshape((1,3))
np.savetxt('a.txt',b,fmt='%d')
【讨论】:
我知道这是旧的,但这些答案都没有解决 numpy 没有按行保存数组的根本问题。我发现这一个班轮对我有用:
b = np.matrix(a)
np.savetxt("file", b)
【讨论】:
非常非常简单: [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')
注意,方括号之间的逗号,内列表是外列表的元素
【讨论】:
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")
【讨论】:
只是
' '.join(a)
并将此输出写入文件。
【讨论】:
TypeError: sequence item 0: expected string, numpy.int32 found,所以在加入之前必须先转换成字符串。