我正在尝试定义一个我想限制一部分功能的功能。我尝试使用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()
我可能会犯一个菜鸟错误,但是非常感谢您的帮助!
答案 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)