用numpy savetxt保存。数组元素作为列

时间:2017-08-02 00:42:14

标签: numpy

我对Python很陌生,试图让我的Matlab成瘾。我正在将我的实验室的许多机器视觉代码转换为Python,但我只是坚持节约的一个方面。在代码的每一行,我们在数组中保存6个变量。我想将这些作为带有bumpy.savetxt的txt文件中的6列之一输入。然后,跟踪循环的每次迭代将为该给定帧添加类似的变量作为txt文件中的下一行。

但是我不断获得一个随每个循环而增长的列。我附上了一个简单的代码来显示我的问题。当它循环时,会产生一个称为输出的变量。我希望这是txt文件的三列,并且循环的每次迭代都是一个新行。有没有简单的方法呢?

import numpy as np

dataFile_Path = "dataFile.txt"
dataFile_id = open(dataFile_Path, 'w+')

for x in range(0, 9):
    variable = np.array([2,3,4])
    output = x*variable+1
    output.astype(float)
    print(output)
    np.savetxt(dataFile_id, output, fmt="%d")

dataFile_id.close()

1 个答案:

答案 0 :(得分:1)

In [160]: for x in range(0, 9):
     ...:     variable = np.array([2,3,4])
     ...:     output = x*variable+1
     ...:     output.astype(float)
     ...:     print(output)
     ...:     
[1 1 1]
[3 4 5]
[5 7 9]
[ 7 10 13]
[ 9 13 17]
[11 16 21]
[13 19 25]
[15 22 29]
[17 25 33]

所以你一次写一行。 savetxt通常用于编写二维数组。

请注意,打印仍然是整数 - astype返回一个新数组,它不会改变原位。

但是因为你给它1d数组,所以把它们写成列:

In [177]: f = open('txt','bw+')
In [178]: for x in range(0, 9):
     ...:     variable = np.array([2,3,4])
     ...:     output = x*variable+1
     ...:     np.savetxt(f, output, fmt='%d')
     ...:     
In [179]: f.close()
In [180]: cat txt
1
1
1
3
4
5
5
7
9

如果我给savetxt一个二维数组((1,3)形状),它会写

In [181]: f = open('txt','bw+')
In [182]: for x in range(0, 9):
     ...:     variable = np.array([2,3,4])
     ...:     output = x*variable+1
     ...:     np.savetxt(f, [output], fmt='%d')
     ...:     
     ...:     
In [183]: f.close()
In [184]: cat txt
1 1 1
3 4 5
5 7 9
7 10 13
9 13 17
11 16 21
13 19 25
15 22 29
17 25 33

但更好的方法是构造二维数组,并用一个savetxt调用来编写:

In [185]: output = np.array([2,3,4])*np.arange(9)[:,None]+1
In [186]: output
Out[186]: 
array([[ 1,  1,  1],
       [ 3,  4,  5],
       [ 5,  7,  9],
       [ 7, 10, 13],
       [ 9, 13, 17],
       [11, 16, 21],
       [13, 19, 25],
       [15, 22, 29],
       [17, 25, 33]])
In [187]: np.savetxt('txt', output, fmt='%10d')
In [188]: cat txt
         1          1          1
         3          4          5
         5          7          9
         7         10         13
         9         13         17
        11         16         21
        13         19         25
        15         22         29
        17         25         33