1
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 时获得所有值

4

3 回答 3

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。或者,由于我们没有使用 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')
于 2013-06-30T09:41:11.273 回答
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)])
于 2013-06-30T09:29:56.717 回答
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()
于 2013-06-30T09:41:41.397 回答