numpy的伪逆使用方法,多维数据需要更改为二维的数据才好用

问题来源

A*x=y当A不可逆如何解x

问题解决

# 求解系数
import numpy as np
a= np.random.randn(2,3)
a2=( np.random.randn(2,3))*1j
a=a+aa
print(a)
B = np.linalg.pinv(a)
print(B) # B为a的伪逆矩阵
# np.allclose(a,b) 判断是不是精确解
# np.allclose(a, np.dot(a, np.dot(B, a)))
# np.allclose(B, np.dot(B, np.dot(a, B)))

@是矩阵的乘法运算符,python>=3.5可用
正常求出来的B,检验得到
a@B是一个单位矩阵
B@a也是单位矩阵
两个单位矩阵的尺寸不一样,一个是3,3 一个是2,2
《numpy的伪逆使用方法,多维数据需要更改为二维的数据才好用》
得到的结果检验np.allclose是否是精确解
我的问题是
146个模式,每个模式有3个分量,每个模式取3个位置
所以是
(146,3,3)的数据

小插曲

叠加的结果预期得到的是(3,3)
所求的系数是1,146
预期想法是
(1,146)@(146,3,3) = (3,3)
可是高维的矩阵乘法没有确切定义不好用
改为

将三个点的三个分量变为9个值

(1,146)@(146,9) = (1,9)

所以求解

数据预设点放在(1,9)内部
源数据点放在(146,9)内部
得到的系数是(1,146)

所有的代码如下

# encoding=utf-8
# such as the problem below
# you have x,y and you know k*x=y
# you want to get k

import numpy as np
# x is your data,below i random get x
x= np.random.randn(146,3*3)+( np.random.randn(146,3*3))*1j

# k is of course is (146,1) data
# result is data y the above have said
result = np.random.randn(1,3*3)+np.random.randn(1,3*3)*1j
a_t = np.linalg.pinv(x)

# k is the answer you get !
k= np.dot(result,a_t)
    原文作者:a_rose_for_tang
    原文地址: https://blog.csdn.net/a_rose_for_tang/article/details/112687566
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞