2016-06-12 6 views
0

こんにちは!なぜ私の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 
+0

私は定義された関数が存在しないため、このコードについて再帰的であるものを参照してくださいわからない:vetorlistであれば、単純なコンストラクタ呼び出しは、トリックを行います。あなたの質問に[編集]して[mcve]を表示しようとする可能性がありますか? –

+0

vetorはすでにあなたが望むように見えます。どうしてvetorをコピーしないのですか? – Craicerjack

+0

@Craicerjack、私は実際にvetorの最後の50個の値を格納してからファイルに書き込む必要があります。最良の選択肢は、それらを保存して最初のものを捨てるリストにそれらを保存することだったと考えました。特定のイベントが発生すると、「matriz」に格納された値がファイルに書き込まれます。 –

答えて

0

は/コピー/ asignmentコンストラクタが呼び出されると、オブジェクトの内容は基本的にコピーされ、C++します。 aのタイプがint/floatまたはstruct/class(つまりstd::vector<T>)のようなプリミティブタイプであるかどうかに関係なく、

しかし、変数abは、C++参照やc-ポインタのようなオブジェクトへの参照です(ただし、ポインタ逆参照構文はありません)。

C-プログラマが修正することはabを変更しないだろうと思うかもしれませんが、同じオブジェクトへの両方の参照が(ある

a = [1, 2, 3] 
b = a 
a.append(42) 
print(b) 

意志出力[1, 2, 3, 42]aためとb、これは次のスニペットではそうではありませんメモリ内)。

これを解決するには、matriz[cnt]に割り当てる前に、vetorを明示的にコピーする必要があります。 Shallow and deep copy operationsをご覧ください。深いコピーが必要なものです。

編集:list(vetor)

+0

私はそれについて何か疑っていましたが、私のCの考え方は "いいえ、それはできません..."と言っています –

+0

私は "new_vetor = list(vetor)"を使って答えを解決するために新しい変数に取り組みました。 あなたの答えを編集してこの可能性を強調することもできます。 –

+0

私はあなたの例が最小の実行例ではないので、 'vetor'のタイプを知らなかった。 vetorの種類を知らずに、私は一般的にどのようにコピーするのかは言えません。 – Markus

関連する問題