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 到 500 时获得所有值
不要使用 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
。或者,由于我们没有使用 a for-loop
,它只需要计算一次。
最后,形成一个二维数组(使用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')
您可以使用该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)])
据我了解,它很简单;
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()