numpy数组到文件,np.savetxt

时间:2016-01-13 13:33:13

标签: python numpy

当我使用np.savetxt('file.txt',(arr1,arr2,arr3))时,将多个numpy数组保存到文件的最佳方法是什么? 数组按列而不是按行保存,因此很难导入到excel中。 如何以更标准的方式保存数组?

谢谢

1 个答案:

答案 0 :(得分:4)

我几乎直接回答了这里概述http://rinocloud.github.io/rinocloud-tutorials/saving-data-with-numpy

使用vstack

使用vstack

从numpy保存多个数组

假设我们想要保存到文件中的numpy数组

x = np.random.random_integers(0, 10, size=10)
np.savetxt('test.txt', x)

它将提供包含以下内容的文件

0.0e+00
8.0e+00
7.0e+00
6.0e+00
1.0e+01
7.0e+00
9.0e+00
9.0e+00
0.0e+00
3.0e+00

这很棒,基于列的表示意味着它易于导入到csv兼容程序中 像excel,LabView,Matlab和Origin。

但是当我们想要将两个或多个阵列保存在一起并确保文件仍然可以轻松导入时会发生什么 进入不同的计划。

如果我们只是使用

x = np.random.random_integers(0, 10, size=10)
y = np.random.random_integers(0, 10, size=10)
z = np.random.random_integers(0, 10, size=10)

np.savetxt('test.txt', (x, y, z))

我们得到了

9.0e+00 9.0e+00 4.0e+00 2.0e+00 0.0e+00 8.0e+00 1.0e+01 2.0e+00 1.0e+00 9.0e+00
2.0e+00 3.0e+00 1.0e+00 9.0e+00 2.0e+00 5.0e+00 1.0e+01 2.0e+00 8.0e+00 3.0e+00
9.0e+00 8.0e+00 2.0e+00 7.0e+00 9.0e+00 0.0e+00 6.0e+00 0.0e+00 2.0e+00 3.0e+00

所以请使用numpy vstack

x = np.random.random_integers(0, 10, size=10)
y = np.random.random_integers(0, 10, size=10)
z = np.random.random_integers(0, 10, size=10)

np.savetxt('test.txt', np.vstack((x, y, z)).T)

这为我们提供了test.txt

9.0e+00 2.0e+00 9.0e+00
9.0e+00 3.0e+00 8.0e+00
4.0e+00 1.0e+00 2.0e+00
2.0e+00 9.0e+00 7.0e+00
0.0e+00 2.0e+00 9.0e+00
8.0e+00 5.0e+00 0.0e+00
1.0e+01 1.0e+01 6.0e+00
2.0e+00 2.0e+00 0.0e+00
1.0e+00 8.0e+00 2.0e+00
9.0e+00 3.0e+00 3.0e+00

哪个更便携,可以轻松导入到excel等程序中。

要使用numpy再次读取文件,请使用

x, y, z = np.loadtxt('test.txt').T

这是一种从numpy获取数组进出文件的快速简便方法。它使文件可以移植以便与其他程序一起使用。