matlab中非方阵的矩阵左除右除怎么用python实现实现

矩阵的除法是对方阵使用的,但matlab里面可以对非方阵也能左除,右除,查资料说是matlab对非方阵按列进行了householder变换,但是没查到python里面怎么实现这个功能。求助一下各位大佬,这个怎么实现?

你可以看看matlab官方说明:

(1)backslash \

说明
示例
x = A\B 对线性方程组 A*x = B 求解。矩阵 A 和 B 必须具有相同的行数。如果 A 未正确缩放或接近奇异值,MATLAB® 将会显示警告信息,但还是会执行计算。
如果 A 是标量,那么 A\B 等于 A.\B。
如果 A 是 n×n 方阵,B 是 n 行矩阵,那么 x = A\B 是方程 A*x = B 的解(如果存在解的话)。
如果 A 是矩形 m×n 矩阵,且 m ~= n,B 是 m 行矩阵,那么 A\B 返回方程组 A*x= B 的最小二乘解。

你要用python实现backslash,其实很简单

import numpy as np
def backslash(a,b):
    m,n=a.shape
    p,q=b.shape
    if(m!=p):
        print('dimensions do not match!')
        return -1
    if(m==n):
        return np.linalg.solve(a,b)
    else:
        a1 = a.T.dot(a)
        b1 = a.T.dot(b)
        return np.linalg.solve(a1,b1)

(2)slash /
官方说明

x = B/A 对线性方程组 x*A = B 求解 x。矩阵 A 和 B 必须具有相同的列数。如果 A 未正确缩放或接近奇异值,MATLAB® 将会显示警告信息,但还是会执行计算。
如果 A 是标量,那么 B/A 等于 B./A。
如果 A 是 n×n 方阵,B 是 n 列矩阵,那么 x = B/A 是方程 x*A = B 的解(如果存在解的话)。
如果 A 是矩形 m×n 矩阵,且 m ~= n,B 是 n 列矩阵,那么 x=B/A 返回方程组 x*A = B 的最小二乘解。

这个就更简单了,只需要:

import numpy as np
def slash(a,b):
    a=a.T
    b=b.T
    x = backslash(a,b)
    return x.T