2011-09-03 5 views
2

을 나는 심지어이 그것은 mtrixes 예를루프를 사용하여 행렬을 곱하는 방법 - 파이썬

[대한

[1,2]을 곱하면 for 루프를 할 필요가 일을 시작하는 방법을 아무 생각을, [3,4] * [3,4], [5,6]

[1,2], [3,4]

[3,4] * [5,6]

많은 도움을 주시기 바랍니다 그 확인 그래서 그나마의 흐름 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://en.wikipedia.org/wiki/Matrix_ (mathematics) # Matrix_multiplication.2C_linear_equations_and_linear_transformations)가 도움이 될 수 있습니다. – JiminP

+0

모두가 매트릭스의 두 목록입니다 – 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

당신은 행렬 곱셈의 작동 방식을 보면 :

[ 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 ] 

은 다음 예를이를 계산하는 방법을 확인할 수 있습니다 만약 소자 I 출력 매트릭스의 J 대한 승산 경우 그건을하므로, 다음은 컬럼 RHS 행렬의 J에서 모든하여 LHS 행렬 I 행 의 모든 곱해야 단일 for 루프 (행 의 요소 수가 열 j과 같습니다).

는 또한 행의 for 루프 내에 중첩 열에 대한 루프 A가 출력 매트릭스의 치수 I 및J의 모든 조합을 포함 할 필요가있다.

실제 코드는 물론 사용자가 구현할 수있는 연습 코드입니다.

+0

예 위의 편집을 좋아합니다. 곱슬 곱슬하는 방법을 알고 있습니다. for 루프를 사용하여 코드를 작성해야합니다. 코딩을 시작하는 방법에 대한 아이디어 나 팁이 있습니다. – jimbob

+0

곱셈하는 방법을 알고 있다면 코드를 작성할 수 있습니다. – rfw

+0

ill try do i guess – jimbob

2

부셔보세요. 행렬을 곱하는 함수를 작성하기 전에 벡터를 곱하는 함수를 작성하십시오. 그렇게 할 수 있다면, 두 행렬을 곱하는 것은 결과 행렬의 모든 원소 i, j에 대해 행 i와 열 j를 곱하는 문제입니다.

+0

시도해보십시오. – jimbob

+0

"시도하거나하지 않습니다. 시도가 없습니다." - Yoda – 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를 반복하고 각 가능한 쌍마다 이것을 수행합니다.

관련 문제