for tstep in arange (1,500,1):
Intensity=np.sum(Itarray*detarray)
print tstep*t*10**9, "\t", Intensity.real
对于上面的程序,如何将两个数组tstep * t * 10 ** 9和Intensity.real保存为csv文件,作为带有选项卡的两个列,以便在循环从1到1时获取所有值500
答案 0 :(得分:2)
使用
而不是使用for循环tsteps = np.arange(1,500,1, dtype='int64')*t*10**9
构建NumPy数组。请注意NumPy数组有一个dtype。 dtype确定数组中元素可表示的数字范围。例如,对于dtype int64
,数组可以表示
In [35]: np.iinfo('int64').min, np.iinfo('int64').max
Out[35]: (-9223372036854775808L, 9223372036854775807L)
为了速度,NumPy不检查算术溢出。
如果499*t*10**9
超出此范围,则数组将包含错误的数字。因此,您有责任选择正确的dtype以避免算术溢出。
另请注意,如果t
是浮点数,那么np.arange(1,500,1, dtype='int64')*t
将升级到dtype float64
,其可表示值的范围介于
In [34]: np.finfo('float64').min, np.finfo('float64').max
Out[34]: (-1.7976931348623157e+308, 1.7976931348623157e+308)
np.sum(Itarray*detarray)
不依赖tstep
,因此可以将其拉出for-loop
。或者,因为我们没有使用for-loop
,所以只需要计算一次。
最后,形成一个2D数组(使用np.column_stack),并将其保存到np.savetxt的文件中:
import numpy as np
tsteps = np.arange(1,500,1, dtype='int64')*t*10**9
Intensity = np.sum(Itarray*detarray)
np.savetxt(filename, np.column_stack(tsteps, Intensity.real), delimiter='\t')
答案 1 :(得分:0)
您可以使用csv
模块。你的问题有点不清楚。我假设Intensity
是一个包含500个条目的数组。
Intensity = np.sum(Itarray*detarray)
w = csv.writer(open('output.csv','w'), delimiter='\t')
w.writerows([('%e' % ((i+1)*t*10**9),'%f' % b) for i,b in enumerate(Intensity.real)])
答案 2 :(得分:0)
据我所知,它很简单;
myfile = open("test.out", "w")
for tstep in arange (1,500,1):
Intensity=np.sum(Itarray*detarray)
myfile.write(str(tstep*t*10**9) + '\t' + str(Intensity.real) + '\n')
myfile.close()