使用numpy savetxt保存。作为列的数组元素
我是Python新手,正在努力戒掉对Matlab的依赖。我正在将我实验室的很多机器视觉代码转换成Python,但我只是停留在节省的一个方面。在每行代码中,我们在一个数组中保存6个变量。我想把它们作为6列之一输入到一个带有bumpy.savetxt的txt文件中。跟踪循环的每次迭代都会为给定帧添加类似的变量,作为txt文件中的下一行 但我总是得到一个单独的列,它随着每个循环而增长。我附上了一个简单的代码来说明我的问题。当它循环通过时,将生成一个称为output的变量。我希望这是txt文件的三列,循环的每个迭代都是一个新行。有什么简单的方法可以做到这一点吗使用numpy savetxt保存。作为列的数组元素,numpy,Numpy,我是Python新手,正在努力戒掉对Matlab的依赖。我正在将我实验室的很多机器视觉代码转换成Python,但我只是停留在节省的一个方面。在每行代码中,我们在一个数组中保存6个变量。我想把它们作为6列之一输入到一个带有bumpy.savetxt的txt文件中。跟踪循环的每次迭代都会为给定帧添加类似的变量,作为txt文件中的下一行 但我总是得到一个单独的列,它随着每个循环而增长。我附上了一个简单的代码来说明我的问题。当它循环通过时,将生成一个称为output的变量。我希望这是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()
所以你一次只写一行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
一个2d数组((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
但更好的方法是构造2d数组,并使用一个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
非常感谢。这很有效。我很感激。我不想生成整个2数组,因为它用于存储视频中跟踪对象的x,y值。所以这个文件会变得非常大。我的理解是,将值写入开放文本文档会更快。但是,您展示的方法帮助我按照自己的意愿将值适当地写入文本文件。
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