2011-09-03 12 views
2

を私もこの それはmtrixes例ループのために使用して行列を乗算する方法 - Pythonの

[用

[1,2]を乗算するループのためにする必要があることを開始する方法はわかりませんが、 [3,4]] * [[3,4]、[5,6]

[1,2]、[3,4]

[3、4] * [5、6]

大変お手伝いが必要です I kn OWのdontの90%は、それはそれだけで私はパターンが

a[1][1]*b[1][1]+a[1][2]*b[2][1]  a[1][1]b[1][2]+a[1][2]b[2][2] 

a[2][1]b[1][1]+a[2][2]b[2][1]   a[2][1]b[1][2]+a[2][2]b[2][2] 
+1

あなたが最初に持っているものを投稿できますか? – rfw

+1

[このウィキペディアの記事](http://ja.wikipedia.org/wiki/Matrix_(数学)#Matrix_multiplication.2C_linear_equations_and_linear_transformations)が役に立ちます。 – JiminP

+0

はすべて行列の2つのリストです – jimbob

答えて

1
result = [] # final result 
for i in range(len(A)): 

    row = [] # the new row in new matrix 
    for j in range(len(B)): 

     product = 0 # the new element in the new row 
     for v in range(len(A[i])): 
      product += A[i][v] * B[v][j] 
     row.append(product) # append sum of product into the new row 

    result.append(row) # append the new row into the final result 


print(result) 
2
リストのことで、それを見ているかなり確信している2つの方形の行列

にする必要がある

OKですので、私のためにコーディングしたいです

あなたは行列の乗算がどのように機能するかを見てみると:

[ 1 2 ] x [ 5 6 ] = [ 1*5+2*7 1*6+2*8 ] 
[ 3 4 ] [ 7 8 ] [ 3*5+4*7 3*6+4*8 ] 

その後、あなたはこれを計算するための方法、例えばを決定することができますあなたは要素、出力行列のJために乗じている場合にはあるので、あなたは、列RHS行列のJですべてでLHS行列のI行のすべてを乗算する必要があります単一のforループ(行の要素の数がの場合、は列jと等しい)。

また、行のforループ内にネストされた列のforループで出力行列の大きさのためIJのすべての組み合わせを網羅する必要があります。

実際のコードは、もちろん実装するための練習です。

+0

ええ、上記のように編集しました。私は乗算する方法を知っています。私はちょうどforループを使用してコードを作成する必要があります。コードを開始する方法についてのアイデアやヒント – jimbob

+0

繁殖方法を知っていれば、 – rfw

+0

ill tr​​y do i guess – jimbob

2

これを分解してください。行列を乗算する関数を書く前に、ベクトルを乗算する関数を書いてください。あなたがそれを行うことができれば、2つの行列を掛けることは、結果の行列のすべての要素i、jに対して行iと列jを掛けることにすぎません。

+0

私はそう思うよ – jimbob

+0

"Do、or do not。tryはありません。" - ヨーダ – Caleb

1
>>> A=[[1,2],[3,4]] 
>>> B=[[3,4],[5,6]] 
>>> n=2 
>>> ans=[[0]*n for i in range(n)] 
>>> ans 
[[0, 0], [0, 0]] 
>>> for i in range(n): 
...  for j in range(n): 
...    ans[i][j]=sum((A[i][v]*B[v][j] for v in range(n))) 
... 
>>> ans 
[[13, 16], [29, 36]] 

行列の乗算の式を単純化する必要があると思います。

私たちはA * B = Cを返します。 Cij =答えのi行目とj列目の値です。例えば、上記の例では、C12 = 16とC11 = 13です(これは配列の0番目の位置であるため、1ではなく0から始まることに注意してください)。

Cij = dot_product(row_i_of_A、column_j_of_B)= sum

答え全体(Cのすべて)が必要なので、すべてのCijを解く必要があります。これは、すべての可能なペアijを試す必要があることを意味するので、範囲(n)内のi、範囲(n)内のiをループし、可能な各ペアについてこれを行う。

関連する問題