我对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()
答案 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