我试图实现一个高斯拟合,我有一个问题,当我试图乘以如下所示的矩阵。 为什么我会出错? 我打印结果只是为了验证这两个矩阵的多重应用,当我这样做的时候,我得到了同样大小的矩阵,并且这些值是正确的。在
有什么帮助吗?在
谢谢
代码
import numpy as np
import pandas as pd
spectre = pd.read_csv('spectre.txt')
wl = pd.read_csv('longueur_d_onde.txt')
spectre = spectre -8000
A = wl.iloc[185:196,0]
B = spectre.iloc[185:196, 0 ]
#*******
sigma = 2565/8192
mu = A[192]
A_ = np.transpose(np.matrix(A))
Mu_ = np.transpose(np.zeros((1,len(A))))
for i in range(len(A)):
Mu_[i] = mu
mu_ = A_-Mu_
mu_t = np.transpose(mu_)
for i in range (100):
#Y = dat/dat[30]
Y = np.matrix((B/B[192]))
Yt = np.transpose(Y)
N = np.exp(-np.power(mu_,2)//(2*sigma**2))
print(N*np.power(mu_,2)) # when i print this i got the error.
错误
^{pr2}$
您可能没有使用预期的矩阵乘法类型。
N * np.power(mu_,2))
给出了Hadamard积(或元素矩阵乘法)。在如果你正在寻找真正的矩阵矩阵乘法,你应该使用}
N.dot(*np.power(mu_,2))
或{没有你的文件,我不能重新计算你的计算,但我可以提出一些建议。在
}现在是熊猫系列。在
^{pr2}$A
和{np.matrix(A)
生成一个(1,11)形状matrix
;transpose
将其更改为(11,1)。A_ = A.to_numpy()
将创建一个(11,)ndarray
。A_=np.reshape(A_, (11,1)
将在不使用np.matrix
重载的情况下使其成为2d。在Mu_
是(11,1)matrix
,所有插槽中都有mu
。在mu_ = A_-mu
也能起到同样的效果。无需制作Mu_
。mu_
将与A_
具有相同的类型和形状。在无需制作
mu_t
(形状(1,11))。在我不明白这个循环是为了什么。在
同样,
Y = (B/B[192]).to_numpy()
应该足够了。但是Y
在下面没有使用。在N
与mu_
(和A_
)具有相同的类型和形状这个乘法的目的是什么?结果应该是(11,1)元素积,还是(1,1)
dot
积?不管怎样,你都不需要2dmatrix
。在我认为您的代码可以简化为:
相关问题 更多 >
编程相关推荐