Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用numpy savetxt保存。作为列的数组元素_Numpy - Fatal编程技术网

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

使用numpy savetxt保存。作为列的数组元素,numpy,Numpy,我是Python新手,正在努力戒掉对Matlab的依赖。我正在将我实验室的很多机器视觉代码转换成Python,但我只是停留在节省的一个方面。在每行代码中,我们在一个数组中保存6个变量。我想把它们作为6列之一输入到一个带有bumpy.savetxt的txt文件中。跟踪循环的每次迭代都会为给定帧添加类似的变量,作为txt文件中的下一行 但我总是得到一个单独的列,它随着每个循环而增长。我附上了一个简单的代码来说明我的问题。当它循环通过时,将生成一个称为output的变量。我希望这是txt文件的三列,循

我是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