-1

2回目の編集

「stokes_line」は次のように生成されます。

os.system('pdv -t %s > temp.txt ' % epoch_name)
    stokes_line = np.genfromtxt('temp.txt', usecols=3, dtype=[('stokesI','float')],     skip_header=1)

os.system('vap -nc "mjd" %s >> mjd.txt' % new_y[i])
stokes_list[b] = stokes_line

「pdv」は、「stokes_line」で使用される数値を生成する別のプログラムからのコマンドです。

stokes_list は、新しい stokes_line を毎回ループで追加するだけです。

編集:

stokes_line は numpy.genfromtxt コマンドで作成され (したがって、txt ファイルから抽出されます)、float で構成され、次のようになります。

[(0.00126596,) (0.000621272,) (0.00058694,) ..., (0.0015368,) (0.000926448,) (7.95851e-05,)]

それらの束が集まって stokes_list を構成し、各 stokes_line は同じ数の float で構成されます。

genfromtxt がすべて角かっこであるリストを作成しているのではなく、何か他のもの (シーケンスと呼ばれます) を作成しているため、問題ですか??


私のラップトップ (python バージョン 2.7.3) で動作する python コードを書きましたが、大学のデスクトップ (python バージョン 2.5.2) では実行されないようです。

ここに多くのコードを表示しても役に立たないと思いますが、エラー メッセージは次の 2 行の 2 番目にあります。

os.system('vap -nc "mjd" %s >> mjd.txt' % new_y[i])
stokes_list[b] = stokes_line

「vap」は、いくつかの値を返す別のプログラムからのコマンドです。とにかく、問題の核心は、古いバージョンの Python で実行した場合にのみ、次のエラー メッセージが表示されることです。

ValueError: 配列要素をシーケンスで設定しています。

今、私は少し調査を行いましたが、問題はそのようなリストの長さに互換性がないことが原因であると言われていますが、そうである場合、新しいバージョンの Python で実行すると正常に動作するのはなぜですか。

どんな助けでも素晴らしいでしょう、ありがとう!

4

2 に答える 2

3

.formatFormatterクラスは2.6で追加されました。

os.system('vap -nc "mjd" %s >> mjd.txt' % new_y[i])動作するはずです。

于 2012-09-10T06:44:51.197 に答える
0

を使用しているときはnp.genfromtxt(…, usecols=3, dtype=[("stokesI","float")])、フィールドが 1 つだけの構造化配列を作成しています ( "stokesI")。もちろん、配列を印刷すると、次の構造が表示されます。

[(0.00126596,) (0.000621272,) (0.00058694,) ..., (0.0015368,) (0.000926448,) (7.95851e-05,)]

各項目はnp.void名前付き float フィールドで構成されます。

少し無駄に見えますが、おそらく式を次のように単純化できます。

np.genfromtxt(…,usecols=3, dtype=float)

次に取得します。

[  1.26596000e-03   6.21272000e-04   5.86940000e-04 ...  1.53680000e-03
   9.26448000e-04   7.95851000e-05]

古いバージョンの Python で明らかに失敗する理由として考えられるのは、1.4 や 1.5 などの古いバージョンの NumPy を使用していることです。それ以降の構築にはいくつかの改善がありましたndarrays(ジェネレーターの処理の改善、文字列からの自動変換など)。

于 2012-09-10T18:50:17.757 に答える