for tstep in arange (1,500,1):
Intensity=np.sum(Itarray*detarray)
print tstep*t*10**9, "\t", Intensity.real
上記のプログラムの場合、2 つの配列 tstep*t*10**9 と Intensity.real をタブ付きの 2 つの列として csv ファイルに保存し、ループが 1 から 500 になるときにすべての値を取得する方法を教えてください。
for ループを使用する代わりに、
tsteps = np.arange(1,500,1, dtype='int64')*t*10**9
NumPy 配列を構築します。NumPy 配列には dtype があることに注意してください。dtype は、配列内の要素によって表現可能な数値の範囲を決定します。たとえば、 dtypeint64
を使用すると、配列は次の間のすべての整数を表すことができます。
In [35]: np.iinfo('int64').min, np.iinfo('int64').max
Out[35]: (-9223372036854775808L, 9223372036854775807L)
速度のために、NumPy は算術オーバーフローをチェックしません。この範囲外の場合499*t*10**9
、配列には間違った数値が含まれます。したがって、算術オーバーフローを回避するために適切な dtype を選択する責任はあなたにあります。
t
が float の場合、 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を使用して) 2D 配列を形成し、 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()