定义使用min()的函数

时间:2019-05-28 15:53:31

标签: function jupyter-notebook min

我正在尝试定义一个我想限制一部分功能的功能。我尝试使用min()来做到这一点,但是它返回

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

我的代码:

def f(x, beta):
    K_w = (1+((0.5*D)/(0.5*D+x))**2)**2
    K_c = min(11,(3.5*(x/D)**(-0.5)))   # <-- this is what gives me the problem. It should limit K_c to 11, but that does not work.
    K_tot = (K_c**2+K_w**2+2*K_c*K_w*np.cos(beta))**0.5
    return K_tot

x = np.linspace(0, 50, 100)
beta = np.linspace(0, 3.14, 180)

X, Y = np.meshgrid(x, beta)
Z = f(X, Y)

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 100, cmap = 'viridis')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z');

我希望K_c限于11,但是它给出了

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

我可能会犯一个菜鸟错误,但是非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

考虑使用其引用可以在here中找到的np.clip。

np.clip(3.5*(x/D)**(-0.5), None, 11)

针对您的情况。

例如,

>>> import numpy as np
>>> np.clip([1, 2, 3, 15], None, 11)
array([ 1,  2,  3, 11])

您的代码存在的问题是,min正在将一个数字与一个不希望出现的列表进行比较。

或者,这是一种列表理解方法:

A = [1, 2, 3, 15]
B = [min(11, a) for a in A]
print(B)