Python- 矩阵行切片与向量切片的点积



我正在尝试为高斯消除编写一个简单的代码。

import numpy as np
def g_elimination(A,B):
n=A.shape[0]
for i in range(0,n-1):# Pivot Rows where 1st pivot is Row 0
for j in range(i+1,n):#Rows to transform exclude Row 0
B[j]=B[j]-(A[j,i]/A[i,i])*B[i]
A[j]=A[j]-np.dot(A[j,i]/A[i,i],A[i])

def back_substitution(X,A,B):
n=B.shape[0]
for i in reversed(range(0,n)): 
X[i]=(B[i]-np.dot([X[:i]],A[i:,:i]))/A[i,i]

A=np.array([[4.0,-2,1],[-2,4,-2],[1,-2,4]])
B=np.array([11,-16,17],dtype='float64')
X=np.zeros(B.shape)
g_elimination(A,B)
back_substitution(X,A,B)

在反向替换阶段,我试图找到矩阵行切片的点积 带有向量 X 切片的 A。我收到错误

Traceback (most recent call last):
File "main.py", line 25, in <module>
back_substitution(X,A,B)
File "main.py", line 16, in back_substitution
X[i]=(B[i]-np.dot([X[:i]],A[i:,:i]))/A[i,i]
File "<__array_function__ internals>", line 5, in dot
ValueError: shapes (1,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)

谁能帮我纠正这个错误。

帮助我纠正此错误

对于您提供的示例数据,np.dot项最终为 1d 和 2d,如果您将它们切换np.dot(2d,1d)该错误就会消失。不幸的是,我不熟悉您的计算/过程,所以我真的不知道这是否是您想要的。由于其中一个术语是 1d,我想知道您是否打算将其作为标量。

def back_substitution(X,A,B):
n=B.shape[0]
for i in reversed(range(0,n)):
#X[i]=(B[i]-np.dot([X[:i]],A[i:,:i]))/A[i,i]
q = X[:i]
r = A[i:,:i]
s = A[i,i]
t = B[i]
try:
#u = np.dot([q],r)
#u = np.dot(q,r)
#u = np.dot(r,q)
little,big = sorted([q,r],key=lambda w: w.ndim)
u = np.dot(big,little)
except ValueError as e:
print(e)
print(q)
print(r)
print(q.shape,r.shape)
print('*****')
v = (t-u)/s
X[i] = v
#print(X)

这摆脱了您询问的原始ValueError - 但现在X[i] = v抱怨您正在尝试设置带有序列的数组元素。再次不熟悉您要做什么,我不知道解决方案是什么。

最新更新