こんにちは!なぜ私の2次元配列のすべての行が私はそれらのうちの1つに渡す値を取るのですか?
"vetor"がいくつかの変数の現在の状態で、50行と10列の2次元配列である "matriz"に最初の50を格納している場合、次のコードを再帰的に実行しようとしています。すべてがゼロとして初期化されます。
最初の行では、最初の行で現在の「vetor」の値が使用されます。これまでのところ良いことでしたが、2番目のループでは、 "vetor"値が2番目と "matriz"の1行目の両方に割り当てられます。たとえば、最後の反復では、「matriz」のすべての行が「vetor」の最後の値に等しくなります。
私はCやMATLABで制御工学、主にプログラムを勉強するので、私はちょっとPythonで初心者です...
以下、私は問題があると信じて記述されたコードの一部。あなたがCに割り当てa = b
(あなたのケースでmatriz[cnt]=vetor
)を持っている場合は
#armazena as variáveis do estado
vetor[0]=sc.get_ball_distance()
vetor[1]=sc.get_ball_angle()
vetor[2]=sc.get_target_angle()
vetor[3]=sc.get_obstacle_distance()
vetor[4]=sc.get_obstacle_angle()
vetor[5]=sc.get_spin()
vetor[6]=force_left_anterior
vetor[7]=force_right_anterior
vetor[8]=force_left
vetor[9]=force_right
#armazena o vetor de estado como linha na matriz
if cnt<50:
matriz[cnt]=vetor
cnt=cnt+1
私は定義された関数が存在しないため、このコードについて再帰的であるものを参照してくださいわからない:
vetor
がlist
であれば、単純なコンストラクタ呼び出しは、トリックを行います。あなたの質問に[編集]して[mcve]を表示しようとする可能性がありますか? –vetorはすでにあなたが望むように見えます。どうしてvetorをコピーしないのですか? – Craicerjack
@Craicerjack、私は実際にvetorの最後の50個の値を格納してからファイルに書き込む必要があります。最良の選択肢は、それらを保存して最初のものを捨てるリストにそれらを保存することだったと考えました。特定のイベントが発生すると、「matriz」に格納された値がファイルに書き込まれます。 –