2013-04-01 3 views
0

저는 파이썬에 익숙하지 않고 프로그램을 작성하려고합니다.하지만 올바른 결과물을 얻지 못하고 문제가 있습니다. 도움이 필요합니다. 이것은 질문입니다 : 주어진 nXn 행렬 A와 kXn 행렬 B는 AB를 찾습니다. 여기까지 내가 지금까지 가지고있는 것입니다. 미리 감사드립니다.파이썬을 사용하는 행렬

def matrixmult (A, B): 
    rows_A = len(A) 
    cols_A = len(A[0]) 
    rows_B = len(B) 
    cols_B = len(B[0]) 

    if cols_A != rows_B: 
     print "Cannot multiply the two matrices. Incorrect dimensions." 
     return 

    # Create the result matrix 
    # Dimensions would be rows_A x cols_B 
    C = [[0 for row in range(cols_B)] for col in range(rows_A)] 
    print C 

    for i in range(rows_A): 
     for j in range(cols_B): 
      for k in range(cols_A): 
       C[i][j] += A[i][k]*B[k][j] 
    return C 
+0

여기서 분명히 잘못된 것은 없습니다. 그것이 잘못된 대답을 얻는 예제 입력이 있습니까? – Dougal

+0

실제로는 아니지만 실행하면 출력이 없습니다! – Mido

+0

출력물을 얻지 못한다고 말하면 아무것도 인쇄하지 않거나, 반환 값이'None'입니까? 아니면 다른 것이 있습니까? 오, 그리고 당신이 올린 코드에서,'return C'는 3 대신에 칼럼 4에 있어야합니다. 당신의 게시물에 오타가 있습니까? – kwatford

답변

1

함수 :

this function와 동일하게 나타납니다
def matrixmult (A, B): 
    rows_A = len(A) 
    cols_A = len(A[0]) 
    rows_B = len(B) 
    cols_B = len(B[0]) 

    if cols_A != rows_B: 
     print "Cannot multiply the two matrices. Incorrect dimensions." 
     return 

    # Create the result matrix 
    # Dimensions would be rows_A x cols_B 
    C = [[0 for row in range(cols_B)] for col in range(rows_A)] 
    print C 

    for i in range(rows_A): 
     for j in range(cols_B): 
      for k in range(cols_A): 
       C[i][j] += A[i][k]*B[k][j] 
    return C 

.

나는 실행하는 경우이 :

matrix=[[1,2,3], 
    [4,5,6], 
    [7,8,9]] 

print matrixmult(matrix, matrix) # that is your function... 

그것은 반환 행렬 곱셈 더 간결하게 언급 한 바와 같이

import numpy as np 

a=np.array(matrix) 
b=np.array(matrix) 
print np.dot(a,b) 
# [[ 30 36 42] 
    [ 66 81 96] 
    [102 126 150]] 

그리고 같은 :

[[30, 36, 42], [66, 81, 96], [102, 126, 150]] 

이 NumPy와 동일하다 :

def mult(mtx_a,mtx_b): 
    tpos_b = zip(*mtx_b) 
    rtn = [[ sum(ea*eb for ea,eb in zip(a,b)) for b in tpos_b] for a in mtx_a] 
    return rtn 

아마도 입력 데이터가 문제 일 것입니다.

+0

예, 그건 내 문제였습니다. 당신은 정말로 그것을 잘 설명했습니다. 감사합니다! – Mido

0

numPy 라이브러리를 사용하여 문제를 해결하십시오. NP로서

수입 NumPy와

np.array X = (((2,3), (3, 5)))

np.array Y = (((1,2) (5, -1)))

인쇄의 X * y를

어레이 ([2,6] [15, -5])

더 많은 예제 : http://www.python-course.eu/matrix_arithmetic.php

다운로드 NumPy와 : http://scipy.org/Download

+3

'numpy '가 확실히 프로덕션 코드로가는 길인 반면, 나는 이것이 운동 인 것을 매우 확신합니다. 그래서 라이브러리에 바로 가면 목적을 이길 수 있습니다. 또한 OP는 행렬 곱셈을하지 않고 요소 승법을 수행하므로 두 개의 'ndarray'에 대한 'x * y'가 작동하지 않습니다. 'dot' 또는'matrix' 클래스를 사용해야합니다. – DSM

+0

가져 오기를 시도했지만 작동하지 않거나 잘못 가져 왔습니다! – Mido

+0

Mido 당신은 numpy 웹 사이트에 가서 numpy 라이브러리를 다운로드해야합니다. 필요한 경우 설치가 필요하며 이제 프로젝트로 이동하여 가져 오기를 수행 할 수 있습니다. –

관련 문제