2017-07-15 16 views
0

私がPythonを学び始めたときに見つけた1つの簡単な質問。私はこの出力が独特であることが分かります。私は2Dの電卓を作ってみたかったのですが、私の 'matrixcreator'関数が明らかに異なる行列を生成していると思います。なぜ、matrixmultiplicatorのベクトルが同じではないのですか?おかげ行列は2つの異なる答えを生み出しています

def matrixmultiplicator(matrix, vector1, vector2,): 
    for x in range(len(vector1)): 
     for y in range(len(vector2)): 
      matrix[0][0]=vector1[x]*vector2[y] 
    return matrix 

def matrixcreator(x,y): 
    matrix=[] 
    list=[] 
    #create first dimension 
    for a in range(x): 
     matrix.insert(a,0) 
    #Create the second dimension 
    for b in range(y): 
     list.append(0) 
     for a in range(x): 
      matrix[a]=list 
    return matrix 

if __name__ == '__main__': 
    a=[2,4] 
    b=[2,4] 
    matrix=[[0,0],[0,0]] 
    print(matrix) 
    print(matrixmultiplicator(matrix,a,b)) 
    matrix=matrixcreator(2,2) 
    print(matrix) 
    print(matrixmultiplicator(matrix,a,b)) 

(I、使用)pycharmに出力される。

[0,0]、[0,0]

[16、0]、[0、あなたが再ために、2つの異なるリストを使用matrix=[[0,0],[0,0]]で0]]

[[0,0]、[0,0]]

[[16、0]、[16、0]]

+0

matrixcreatorでインデントを修正して、それが何であるかを確認できますか?これが示すように、エラーが発生します。 –

+0

"なぜ 'matrixmultiplicator'のベクトルが同じではないのですか?"同じものは何ですか?その結果はどうなると思いますか? –

+0

コードをデバッグする方法を学ぶことをお勧めします。 PyCharmなどのIDEから 'print()'ステートメントを追加したり、デバッガを使用することができます。いずれにしても、プログラム内の変数の値を表示し、それらが期待しているものと異なる場所を特定する必要があります。それから、なぜ彼らがあなたが期待しているものと違うのかを理解する必要があります。 –

答えて

0

これは、マトリックスを作成する方法です。インデックスごとに新しいリストが必要です。以前は不要なステップを実行していました。

def matrixcreator(x,y): 
    matrix=[] 
    #create first dimension 
    for a in range(x): 
     list=[] 
     for b in range(y): 
      list.append(0) 
     matrix.insert(a,list) 
    return matrix 

あなたの乗算ルーチンも間違っていると思いますが、わかりません。 1つの座標のみを設定すると、結果に行列を使用するのはなぜですか?

+0

それは問題を解決しました!私は練習として3D電卓を作っていましたが、これらの基本的な手順が間違っていたので、問題がどこにあるかを簡単に確認しなければなりませんでした。その目的は、カスタムマトリックスを作成し、それを乗算することです。 –

1

第二の次元を提示する。ただし、マトリックス作成者では、list=[]を使用して割り当てた同じリストオブジェクトを参照します。

EDIT:同じリストオブジェクトがマトリクス状に複数の位置に割り当てられている場合これは

for a in range(x): 
    matrix[a]=list 

に見ることができます。

それ以外にも、コードでどうしようとしているのか分かりません。ルーピングは気分が落ちます。まず、matrixにxのゼロを挿入します。その後、リストにゼロを追加し、そのステップの反復ごとに、マトリックスの各インデックスを同じリストオブジェクトで上書きします。

EDIT 2:

Yゼロで埋めX異なるリストからなるリストの内包を作成
def matrixcreator(x,y): 
    return [[0] * y for _ in range(x)] 

:あなたはx行とy列の行列を作成したいと仮定すると、あなたがにコードを簡素化することができ。

+0

それは本当です!それが同じメモリアドレスなどで同じリストを参照していることが問題だと考えてください。 2つの異なるリストオブジェクトを割り当てる方法を見つける必要があります。ありがとう。 –

関連する問題