1

2Dのnumpy配列がありvisrecます。私が行った場合

print visrec[0,:]

私はこの出力を得ています:

[  a1   a2   a3   a4  a5   a6]

どこにありa1, a2,..ますかdtype=float64

より明確にvisrec言うと、オブジェクトに格納されている1x6の行列numpy.arrayです。最初は次のコマンドで作成されます。

visrec=numpy.array(numpy.zeros((1,6)))

ループでvisrec、変更して変更レコードをリストに保存しています。私は基本的に各変更をリストに追加していますrec_history=[]。私はこのコマンドを使用します:

rec_history.append(visrec[0,:])

rec_history次に、それをテストするために、次のコマンドでの最初の要素を出力したいと思います。

print rec_history[0]

出力は次の形式です。

[ a1   a2  a3   a4   a5   a6]

ここまではすべて期待通りです。しかし、の複数の要素を印刷しようとするとrec_history、予期しない出力が得られます。このコマンドを発行します:

print rec_history[0:3] 

次の出力を取得します。

[array([ a1,  a2,  a3,  a4,  a5 ,
        a6]), array([  b1,   b2,   b3,
         b4,   b5,   b6]), array([  c1,   c2,   c3,
         c4,   c5,   c6])]

これは正常ですか?実際に配列オブジェクトをレコードリストに格納していますか?この場合、リストの1つの要素だけを印刷しても、異なる種類の出力が得られないのはなぜですか?これは機能と関係がありますprintか?配列オブジェクトを保存したくないので、数値のリストをレコードリストに保存したいと思います。これどうやってするの?私はmatlabを知っていますが、ここでは役に立たないと思います。

4

1 に答える 1

1

元の配列のスライスを保存しています. のスライスからいくつかの配列を取得rec_history[0:3]したので、少なくとも 3 回追加したと思います.

rec_history の最初の項目の最初の 3 つの項目が必要な場合は、次のようにする必要があります。

rec_history[0][:3]

何らかの理由で rec_history 内の配列が必要ない場合は、追加行を次のように変更できます。

rec_history.append(list(visrec[0,:]))

visrecこれは、変更する予定があり、以前の状態でどのように表示されたかを確認したい場合に適しています。これまで行ったように配列スライスを追加するだけでは、配列のその部分への参照のみが作成されるためです。したがって、コードで配列を変更すると、内容も変更されrec_historyます。

于 2012-05-13T00:06:13.533 に答える