如何打印与最小化残差关联的值 - Python
How to print a value associated with a minimized residual - Python
我有一个简单的算法来计算数学模型的残差和一些带有噪声的实验数据。 objective是在振幅和频率已知的情况下求相位。该算法遍历从 0 到 2*pi 的所有相位值(精确到小数点后 3 位)。然后计算每个阶段模型的每次计算的残差。然后程序将每个阶段和残差附加到它们各自的列表中。我知道我可以使用 scipy.optimize 来解决这个问题,但我有理由想要使用这个算法。我的问题是,如何检索与最小残值关联的相位值?该程序如下所示:
import numpy as np
from numpy import loadtxt
data = loadtxt('foo.txt', float)
x = data[:,0]
y = data[:,1]
a = 1.5
f = 0.01
p = []
phase = 0.000
residuals = []
for i in range(0, 6284):
p.append(phase)
model = a*np.sin(2*np.pi*f*x+phase)
res = sum((y-model)**2)
residuals.append(res)
phase += 0.001
print min(residuals)
任何有关如何检索与最小残差关联的相位值的帮助都会有所帮助。谢谢
使用以下代码
p[residuals.index(min(residuals))]
你可以这样做:
min_index, min_value = min(enumerate(residuals), key=lambda p: p[1])
phase_at_min = p[min_index]
但根据您的用例,更好的方法可能是为结果存储元组(甚至使用字典):
results = []
for phase in range(0, 6.284, 0.001):
model = a*np.sin(2*np.pi*f*x+phase)
res = sum((y-model)**2)
results.append((phase, res))
print(min(results, key=lambda x: x[1]))
这样您就可以更轻松地查找各种相量的结果。
我有一个简单的算法来计算数学模型的残差和一些带有噪声的实验数据。 objective是在振幅和频率已知的情况下求相位。该算法遍历从 0 到 2*pi 的所有相位值(精确到小数点后 3 位)。然后计算每个阶段模型的每次计算的残差。然后程序将每个阶段和残差附加到它们各自的列表中。我知道我可以使用 scipy.optimize 来解决这个问题,但我有理由想要使用这个算法。我的问题是,如何检索与最小残值关联的相位值?该程序如下所示:
import numpy as np
from numpy import loadtxt
data = loadtxt('foo.txt', float)
x = data[:,0]
y = data[:,1]
a = 1.5
f = 0.01
p = []
phase = 0.000
residuals = []
for i in range(0, 6284):
p.append(phase)
model = a*np.sin(2*np.pi*f*x+phase)
res = sum((y-model)**2)
residuals.append(res)
phase += 0.001
print min(residuals)
任何有关如何检索与最小残差关联的相位值的帮助都会有所帮助。谢谢
使用以下代码
p[residuals.index(min(residuals))]
你可以这样做:
min_index, min_value = min(enumerate(residuals), key=lambda p: p[1])
phase_at_min = p[min_index]
但根据您的用例,更好的方法可能是为结果存储元组(甚至使用字典):
results = []
for phase in range(0, 6.284, 0.001):
model = a*np.sin(2*np.pi*f*x+phase)
res = sum((y-model)**2)
results.append((phase, res))
print(min(results, key=lambda x: x[1]))
这样您就可以更轻松地查找各种相量的结果。