Python最小二乘法矩阵
最小二乘法矩阵
#!/usr/bin/envpython
#-*-coding:utf-8-*-
importnumpyasnp
defcalc_left_k_mat(k):
"""
获得左侧k矩阵
:paramk:
:return:
"""
k_mat=[]
foriinrange(k+1):
now_line=[]
forjinrange(k+1):
now_line.append(j+i)
k_mat.append(now_line)
returnk_mat
defcalc_right_k_mat(k):
"""
计算右侧矩阵
:paramk:
:return:
"""
k_mat=[]
foriinrange(k+1):
k_mat.append([i,i+1])
returnk_mat
defpow_k(x,k):
"""
计算x列表中的k次方和
:paramx:点集合的x坐标
:paramk:k值
:return:
"""
sum=0
foriinx:
sum+=i**k
returnsum
defget_left_mat_with_x(k_mat,k):
"""
将左侧k矩阵运算得到左侧新的矩阵
:paramk_mat:
:paramk:
:return:
"""
left_mat=[]
forklink_mat:
now_data=[]
forkinkl:
now_data.append(pow_k(x,k))
left_mat.append(now_data)
returnleft_mat
defget_right_mat_with(right_k_mat):
"""
将右侧k矩阵运算得到右侧新的矩阵
:paramright_k_mat:
:return:
"""
right_mat=[]
foriinrange(len(right_k_mat)):
sum=0
forxL,yLinzip(x,y):
a=(xL**right_k_mat[i][0])*(yL**right_k_mat[i][1])
sum+=a
right_mat.append(sum)
returnright_mat
deffuse_mat(left,right):
"""
融合两个矩阵
:paramleft:
:paramright:
:return:
"""
new_mat=[]
foriinrange(len(left)):
asd=np.append(left[i],right[i])
new_mat.append(list(asd))
returnnew_mat
if__name__=='__main__':
k=3
x=[1,2,3]
y=[1,2,3]
#计算原始左侧K矩阵
left_k_mat=calc_left_k_mat(k)
print("原始左侧K矩阵")
print(left_k_mat)
#计算原始右侧K矩阵
right_k_mat=calc_right_k_mat(k)
print("原始右侧k矩阵")
print(right_k_mat)
#计算左侧k矩阵
new_left_mat=get_left_mat_with_x(k_mat=left_k_mat,k=k)
#计算右侧k矩阵
new_right_mat=get_right_mat_with(right_k_mat=right_k_mat)
print("计算后左侧K矩阵")
print(new_left_mat)
print("计算后右侧侧K矩阵")
print(new_right_mat)
print("-----"*10)
#融合两个矩阵左侧矩阵每一行增加右侧矩阵的对应行
new_all=fuse_mat(new_left_mat,new_right_mat)
print("完整矩阵")
print(new_all)
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
