我的代码很简单:
import numpy
def f(x):
return x**2 +1
f_min=10
for x in numpy.arange(-1,10,0.1):
if f(x)<f_min :
f_min=f(x)
x_min=x
else:
print (x_min)
它给了我正确的结果(x - > 0)但不仅一次而且很多次。为什么会这样,我怎么能阻止它呢?
答案 0 :(得分:1)
因为你说过了。 : - )
你的if语句是:
if I have a new minimum, record the value and position;
otherwise, print the existing minimum.
如果没有找到新的最小值,则打印。由于此函数在您的范围内具有最小值,因此您可以获得大量输出。
如果您希望仅打印一次全局最小值,则只执行一次:将其移出循环外。
for x in numpy.arange(-1,10,0.1):
if f(x)<f_min :
f_min=f(x)
x_min=x
print (x_min)
答案 1 :(得分:1)
要解决此问题,请将print语句移出for循环:
import numpy
def f(x):
return x**2 +1
f_min=10
for x in numpy.arange(-1,10,0.1):
if f(x)<f_min :
f_min=f(x)
x_min=x
print (x_min)
为什么这样?好吧,之前,当你在for循环中有print语句时,每次for循环都经过,每当if语句不为true时,它就会打印出来,所以你得到了一堆打印的东西。现在,当你将它移出for循环时,它只能打印一次,程序按预期工作。