如何将包含字符串数字的python数组保存为人类可读的文件

2 投票
2 回答
819 浏览
提问于 2025-04-17 10:03

我想知道如何把这个问题答案中(由Paul提供)创建的数组保存到一个文本文件里。

我该如何打印一个带有(文本)行和列标签的对齐numpy数组?

具体情况是:

a = np.random.rand(5,4)
x = np.array('col1 col2 col3 col4'.split())
y = np.array('row1 row2 row3 row4 row5'.split())
b = numpy.zeros((6,5),object)
b[1:,1:]=a
b[0,1:]=x
b[1:,0]=y
b[0,0]=''
printer = np.vectorize(lambda x:'{0:5}'.format(x,))
print printer(b).astype(object)

[[     col1 col2 col3 col4]
 [row1 0.95 0.71 0.03 0.56]
 [row2 0.56 0.46 0.35 0.90]
 [row3 0.24 0.08 0.29 0.40]
 [row4 0.90 0.44 0.69 0.48]
 [row5 0.27 0.10 0.62 0.04]]

2 个回答

0

你怎么处理这个问题,主要看你打算怎么访问它。因为你想让它容易被人看懂,最简单的方法就是把它打印到一个文件里。不过,这样做会让从文件中恢复数据变得更麻烦。

f = open(Filename, 'w')
f.write(str(printer(b).astype(object)))
f.flush()
f.close()
0

我很喜欢使用repr()和.rjust()这两个功能来处理writelines。假设我有一个矩阵'mat'(也就是一个ndarray),它的形状是A.shape = (10,2),我想要一些特定的格式和四舍五入的效果。通过使用下面的代码,我可以得到一个不错的、调整过的输出:

mat = numpy.random.rand(10,10)
f = open('myFile','a')
m,n = mat.shape
for i in range(0,m):
    for j in range(0,n):
        f.writelines(repr(round(mat[i,j],4)).rjust(7))
f.writelines('\n')

f.close()

撰写回答