【问题标题】:Python- Dot Product of a Slice of Row of Matrix with Slice of a VectorPython-矩阵的切片与向量切片的点积
【发布时间】:2020-02-17 16:54:42
【问题描述】:

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

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 的切片。我收到错误消息

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)

谁能帮我纠正这个错误。

【问题讨论】:

标签: python numpy numpy-ndarray


【解决方案1】:

帮我纠正这个错误。

对于您提供的示例数据,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)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2017-07-26
    • 2017-02-02
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2021-11-26
    相关资源
    最近更新 更多