如何获取python';s np.savetxt是否将循环的每次迭代保存在不同的列中?
这是一个非常基本的代码,做我想要的。。。除了关于文本文件的书写如何获取python';s np.savetxt是否将循环的每次迭代保存在不同的列中?,python,python-2.7,numpy,for-loop,Python,Python 2.7,Numpy,For Loop,这是一个非常基本的代码,做我想要的。。。除了关于文本文件的书写 import numpy as np f = open("..\myfile.txt", 'w') tst = np.random.random(5) tst2 = tst/3 for i in range(3): for j in range(5): test = np.random.random(5)+j a = np.random.normal(test, tst2) np.s
import numpy as np
f = open("..\myfile.txt", 'w')
tst = np.random.random(5)
tst2 = tst/3
for i in range(3):
for j in range(5):
test = np.random.random(5)+j
a = np.random.normal(test, tst2)
np.savetxt(f, np.transpose(a), fmt='%10.2f')
print a
f.close()
此代码将向.txt文件写入一个列,该列在for循环的每次迭代后连接
我希望每个迭代都有独立的列。
如何做到这一点?
注意:我也使用了np.c_[]
,如果我表示命令中的每个迭代,那么将写入列。例如:np.c\a[0],a[1]
等等。问题是,如果我的i
和j
值都很大怎么办?遵循此方法是不合理的。因此运行会产生:
2218:~/mypy$ python3 stack39114780.py
[ 4.13312217 4.34823388 4.92073836 4.6214074 4.07212495]
[ 4.39911371 5.15256451 4.97868452 3.97355995 4.96236119]
[ 3.82737975 4.54634489 3.99827574 4.44644041 3.54771411]
2218:~/mypy$ cat myfile.txt
4.13
4.35
4.92
4.62
4.07 # end of 1st iteration
4.40
5.15
4.98
3.97
....
你明白发生了什么事吗?对savetxt
的一次调用将写入一组行。使用类似a
的1d数组,它每行打印一个数字。(转置(a)
没有任何作用)
文件写入是逐行完成的,不能为添加列而重写。因此,要创建多列,需要创建一个包含多列的数组。然后执行一个savetxt
。换句话说,在写之前收集所有数据
将您的值收集到一个列表中,制作一个数组,然后将其写入
alist = []
for i in range(3):
for j in range(5):
test = np.random.random(5)+j
a = np.random.normal(test, tst2)
alist.append(a)
arr = np.array(alist)
print(arr)
np.savetxt('myfile.txt', arr, fmt='%10.2f')
我得到了15行5列,但你可以调整
2226:~/mypy$ cat myfile.txt
0.74 0.60 0.29 0.74 0.62
1.72 1.62 1.12 1.95 1.13
2.19 2.55 2.72 2.33 2.65
3.88 3.82 3.63 3.58 3.48
4.59 4.16 4.05 4.26 4.39
由于arr
现在是二维的,np.transpose(arr)
做了一些有意义的事情——我会得到5行15列
==================
与
您为每个
i
写一次a
——因此有3行。你扔掉了4次j
迭代。在我的变体中,我收集所有a
,因此得到15行。演示最后一个np.c.[]
位。有什么不合理的地方吗?在这个小示例所涉及的实际代码中,我有3个嵌套for循环,总共804次迭代,用我的小样本大小生成了一个包含17700行的.txt文件。随着样本量的增加,迭代需求也随之变化。这就是为什么它不合理。请更详细地解释所需的文件布局。有多少列,多少行?迭代与列或行之间的关系是什么?列的数量与迭代的数量有关,行的数量与源数据点的数量有关@hpaulj我喜欢下面您使用np.append特性的例子,但是我还没能让它工作。请参见[以获得所使用代码的更好示例。
for i in range(3):
for j in range(5):
test = np.random.random(5)+j
a = np.random.normal(test, tst2)
np.savetxt(f, np.transpose(a), fmt='%10.2f')