索引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')
答案 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]]