使用函数内的函数进行for循环时出错

时间:2019-07-13 13:48:04

标签: function python-3.6

我正在定义一个从数据创建多项式的函数,定义另一个函数以在方程式中使用该多项式,然后使用for循环让它运行直到所计算的值等于或小于0。 在运行for循环时,如果循环应结束,则会产生以下错误-'具有多个元素的数组的真值不明确。使用a.any()或a.all()'

def poly(Hi):
return np.poly1d(np.polyfit(xs, ys, deg=5))

def hip1(Hi,g,e,d,dt):
return Hi -((np.pi*d**2)*np.sqrt(2*g*(Hi + e))*dt) / (4*poly(Hi))

H = [6]
t = [0]
dt = 1
d = 0.25
e = 1
g = 9.81

for i in range(1000000):
t.append((i+1)*dt)
H.append(hip1(H[i],g,e,d,dt))
if H[i+1] < 0: break

------------------------------------------------------------------------
ValueError                                Traceback (most recent call 
last)
<ipython-input-11-a17bdee03e19> in <module>
  2     t.append((i+1)*dt)
  3     H.append(hip1(H[i],g,e,d,dt))
----> 4     if H[i+1] < 0: break

ValueError: The truth value of an array with more than one element is 
ambiguous. Use a.any() or a.all()

1 个答案:

答案 0 :(得分:2)

我试图运行您的代码以了解问题。

我运行了这段代码:

for i in range(1000000):
    t.append((i+1)*dt)
    H.append(hip1(H[i],g,e,d,dt))
    print(H)
    print(i)
    if H[i+1] < 0:
        break

我已经测试过可以打印Hi。因此,循环在第一次迭代时崩溃 并打印:

H = [6, array([2.54840628, 2.54840628, 2.54840628, 2.54840628, 2.54840628, 2.54840628])]

因此,看到H [i + 1]是一个数组,就无法访​​问它。 您的函数hip1返回另一个数组,而不是单个值。

编辑:

代码的新版本:

H = [6]
t = [0]
dt = 1
d = 0.25
e = 1
g = 9.81
xs = [6, 5, 4, 3, 2, 1, 0]
ys = [11700, 9700, 6700, 4500, 3200, 1800, 0]


for i in range(10000):
    t.append((i+1)*dt)
    H.append(np.mean(hip1(H[i],g,e,d,dt)))
    if H[i+1] < 0:
        break

print(H)

对于最后一个问题,我只使用了hip1返回的数组平均值。 数组的值似乎是封闭的,因此具有单个值是一种解决方案。在您的情况下,也许这是错误的,但其想法是拥有唯一的价值,而不是一个数组。

现在,您可以轻松运行程序并测试您的值。