1
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 になるときにすべての値を取得する方法を教えてください。

4

3 に答える 3

2

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')*tdtype にアップキャストされることにも注意してください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')
于 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 に答える