我正在使用矩阵乘法,但是有问题

时间:2019-04-09 09:12:46

标签: python arrays matrix-multiplication

  

索引1超出了尺寸为1的轴0的边界

与sq矩阵乘法完美配合,但存在问题 矩形矩阵 请找我错误

import numpy as np
A=np.array([[12,7,3],
    [4 ,5,6],
   [7 ,8,9]]) 
B=np.array([[1],[1],[1]])
r1,c1=A.shape
r2,c2=B.shape
C=np.array([[0 for j in range(c2)] for i in range(r1)])
if c1==r2:
    for k in range(r1):
        for i in range(c2+1):
            for j in range(c1):
                C[i][j]+=A[k][j]*B[j][i]
    print("Matrix After Multiplication \n\n",C)
else:
    print('Multiplication is not possible')

2 个答案:

答案 0 :(得分:2)

我认为

for i in range(c2+1):

超出范围,因为

r2,c2=B.shape

所以(c2 + 1)太大。

但是

A=np.array([[12,7,3],
    [4 ,5,6],
   [7 ,8,9]]) 
B=np.array([[1],[1],[1]])

C = A@B
C

C = np.dot(A,B)
C

效率更高

答案 1 :(得分:0)

我不确定是否没有使用内置np.dot()函数的原因,但是如果您需要显式地创建for循环来进行矩阵乘法,则可以替换条件语句具有以下内容:

if c1==r2:
    for col in range(c2):
        for row in range(r1):
            for i in range(r1):
                C[row][col] += A[row][i]*B[i][col]
    print("Matrix After Multiplication \n\n",C)
else:
    print('Multiplication is not possible')

结果矩阵的大小为r1 x c2。

但是,如果您能够使用np.dot(),我建议您遵循pyano的建议。

C = np.dot(A, B)

两种方法都会产生

C = [[22]
     [15]
     [24]]