numpy.savetxt无法识别分隔符和换行符参数

时间:2017-10-23 11:37:00

标签: python numpy matrix save

我正在求解一个微分方程,并将每个时间步的结果坐标,速度和加速度存储在一个numpy数组中。最后,我将数组重新整形为一个包含七列(t,x,vx,ax,y,vy,ay)的矩阵。然后,我想使用numpy的savetxt函数将矩阵保存到文本文件中,使用制表符分隔的列和以单独行写的行。我使用的代码如下:

res.reshape(n+1, 7)
np.savetxt('result.txt', res, delimiter='\t', newline='\r\n')

我从中得到的是,矩阵的每个成员都打印在一个单独的行中,如下所示:

0.0000e+00
5.0000e-01
0.0000e+00
-1.0000e+00
0.0000e+00
1.6300e+00
0.0000e+00
0.0000e+00
4.9583e-01
-8.3167e-02
-9.9167e-01

等等。基于question我尝试修改这样的savetxt参数:

np.savetxt('result.txt', [res], delimiter='\t', newline='\r\n')

结果是现在成员被制表符分开,但所有内容都写在一行中:

0.0000e+00  5.0000e-01  0.0000e+00  -1.0000e+00 0.0000e+00  1.6300e+00  0.0000e+00  0.0000e+00  4.9583e-01  -8.3167e-02 -9.9167e-01

等等。我该怎么做才能得到一个如下所示的文件:

0.0000e+00  5.0000e-01  0.0000e+00  -1.0000e+00 0.0000e+00  1.6300e+00  0.0000e+00  
0.0000e+00  4.9583e-01  -8.3167e-02 -9.9167e-01 1.3556e-01  1.6164e+00  -2.7112e-01 
1.0000e-01  4.7953e-01  -1.7773e-01 -9.3289e-01 2.9409e-01  1.5640e+00  -5.7213e-01

1 个答案:

答案 0 :(得分:1)

你的第一个解决方案应该这样做,只是你犯了一个商城错误。结果的reshape不是就地操作。 res是一个数组,在重新整形后,您必须将其分配给变量。

res = res.reshape(n+1,7)

否则,您应该可以

np.savetxt('result.txt', res.reshape(n+1,7), delimiter='\t', newline='\r\n')

此外,您可以使用reshape(-1,7)进行更好的重塑,它会创建7列,并调整所需的行数。

您还可以在文件中添加标题行(会高度推荐它)

header = ('t', 'x', 'vx', 'ax', 'y', 'vy', 'ay')
np.savetxt('result.txt', res.reshape(n+1,7), delimiter='\t', newline='\r\n', header=header