2013-04-01 104 views
0

我是新來的python,我正在寫一個程序來矩陣,但有一個問題,我不知道得到正確的輸出,我需要幫助它。 這是一個問題:給定一個nXn矩陣A和一個kXn矩陣B找到AB。 這是我到目前爲止。預先感謝您矩陣使用python

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'應該在第4列而不是3列。 – kwatford

回答

1

您的功能:

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 

這似乎是一樣this function

如果我運行此:

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

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

它返回:

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

這是一樣的numpy的:

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

與同爲矩陣乘法更簡潔地說:

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庫來解決您的問題。

進口numpy的作爲NP

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

Y = np.array(((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庫。你需要安裝,現在你可以去你的項目並進行導入。 –