我正在尝试使用纯python将两个矩阵相乘.输入(X1是3x3,Xt是3x2):
X1 = [[1.0016, 0.0, -16.0514],
[0.0, 10000.0, -40000.0],
[-16.0514, -40000.0, 160513.6437]]
Xt = [(1.0, 1.0),
(0.0, 0.25),
(0.0, 0.0625)]
Run Code Online (Sandbox Code Playgroud)
其中Xt是另一个矩阵的zip转置.现在这里是代码:
def matrixmult (A, B):
C = [[0 for row in range(len(A))] for col in range(len(B[0]))]
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
C[i][j] += A[i][k]*B[k][j]
return C
Run Code Online (Sandbox Code Playgroud)
python给我的错误是:IndexError:列表索引超出范围.现在我不确定Xt是否被识别为矩阵并且仍然是列表对象,但从技术上讲这应该可行.
我试图定义一个转置矩阵的函数.这是我的代码:
def Transpose (A):
B = list(zip(*A))
return B
Run Code Online (Sandbox Code Playgroud)
现在,当我在程序中的某个地方调用函数时,如下所示:
Matrix = [[1,2,3],[4,5,6],[7,8,9]]
Transpose(Matrix)
print(Matrix)
Run Code Online (Sandbox Code Playgroud)
矩阵没有变化.我究竟做错了什么?
所以我试图将矩阵乘以向量.并且python继续抛出错误.这是我正在尝试的代码:
def matmult(m, v):
rows = len(m)
w = [0]*rows
irange = range(len(v))
sum = 0
for j in range(rows):
r = m[j]
for i in irange:
sum += r[i]*v[i]
w[j],sum = sum,0
return w
Run Code Online (Sandbox Code Playgroud)
这不是我的,但这是我生气之前编码并删除它.错误是这样的:TypeError:+:'int'和'list'的不支持的操作数类型
我猜测python将向量视为int或列表,并且由于类型的不同而不会执行任何基本运算符.有办法解决这个问题吗?不幸的是我不能使用Numpy.