将一组数组从python输出保存到csv文件

时间:2013-06-30 09:15:38

标签: python numpy

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

3 个答案:

答案 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()