2013-04-01 105 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库。你需要安装,现在你可以去你的项目并进行导入。 –