2016-10-22 13 views
-1

私は非常にPythonには新しく、ちょっと邪魔になりました。forループの間に配列のリストを追加する

2x2配列のすべての要素に1を加えるforループを実行しようとしています。しかし、私は各ループの後に各行列を保存したい。私はこれを行うには.append()を使用していますが、最終結果を複数回しか保存していないようです。

result = [] 

def f(): 
    x= np.matrix([[1, 2],[3, 4]]) 
    for i in range(5): 
    result.append(x) 
    x += 1 
    return result 

function = f() 

print function 

は、しかし、出力は次のようになります。

代わりに、すべての結果をロギングの最後の反復の単なる繰り返しである
[matrix([[6, 7], 
    [8, 9]]), matrix([[6, 7], 
    [8, 9]]), matrix([[6, 7], 
    [8, 9]]), matrix([[6, 7], 
    [8, 9]]), matrix([[6, 7], 
    [8, 9]])]' 

。 ご協力いただければ幸いです。

+0

あなたは以下の私の答えを確認しました得ますか?それはあなたが正確に望むものですか? – ettanany

+0

私はあなたの質問に何が起こるのか、私の答えは以下の解決策と一緒に説明しました。あなたがまだ疑問を持っているかどうか私に知らせてください: –

答えて

0

次のことを試してみてください。

import numpy as np 

result = [] 

def f(): 
    x = np.matrix([[1, 2],[3, 4]]) 
    for i in range(5): 
    result.append(x + i) 
    return result 

res = f() 

結果:

>>> res 
[matrix([[1, 2], 
     [3, 4]]), matrix([[2, 3], 
     [4, 5]]), matrix([[3, 4], 
     [5, 6]]), matrix([[4, 5], 
     [6, 7]]), matrix([[5, 6], 
     [7, 8]])] 
0

が起こっている理由は、バックエンドでは、Pythonがポインタを通じて、すべてを扱うということです。したがって、xを追加するたびに、xへのポインタを追加するだけです。しかし、各段階で、同じ場所を指すポインターを追加するだけです。したがって、それらはすべて、行列xの最終値を格納する行列を指しています。代わりに、x.copy() `を追加して行列のコピーを作成する必要があります。変更されたコードは次のようになります。

result = [] 

def f(): 
    x= np.matrix([[1, 2],[3, 4]]) 
    for i in range(5): 
    result.append(x.copy()) 
    x += 1 
    return result 

function = f() 

print(function) 

私は私のPython 3でそれをしようとすると、私は出力

[matrix([[1, 2], 
     [3, 4]]), matrix([[2, 3], 
     [4, 5]]), matrix([[3, 4], 
     [5, 6]]), matrix([[4, 5], 
     [6, 7]]), matrix([[5, 6], 
     [7, 8]])] 
+0

@seewaq私の答えがあなたを助けたら、親切にそれを答えとして受け入れてください:-)詳細はhttp://stackoverflow.com/help/someone-answersを参照してください。 –

関連する問題