Python If/Then根据数组中的每个值应用不同的函数
我有一个据称很容易解决的问题,但我仍然无法解决: 我有一个包含1000个数字的数组,称为“mu”,如下所示:Python If/Then根据数组中的每个值应用不同的函数,python,arrays,python-2.7,numpy,Python,Arrays,Python 2.7,Numpy,我有一个据称很容易解决的问题,但我仍然无法解决: 我有一个包含1000个数字的数组,称为“mu”,如下所示: array([2.25492522e-01, 2.21059993e-01, 2.16757006e-01,....) 现在我需要将这些值插入两个不同的函数: 对于数组中小于0.009的数字,我需要使用等式1: nu = 1 - 5.5 * mu**(0.66) + 3.77 * mu 对于数组中的所有其他数字,我需要将它们插入等式2中: nu = 0.819**(-11.5*mu)
array([2.25492522e-01, 2.21059993e-01, 2.16757006e-01,....)
现在我需要将这些值插入两个不同的函数:
对于数组中小于0.009的数字,我需要使用等式1:
nu = 1 - 5.5 * mu**(0.66) + 3.77 * mu
对于数组中的所有其他数字,我需要将它们插入等式2中:
nu = 0.819**(-11.5*mu)+0.0975**(-70.1*mu)
最后,我需要一个函数值数组“nu”
我尝试了一下这个代码,但没有成功
for item in mu:
if item < 0.009:
nu = 1 - 5.5 * mu**(0.66) + 3.77 * mu
else:
nu = 0.819**(-11.5*mu)+0.0975**(-70.1*mu)
print nu
对于mu中的项目:
如果项目<0.009:
nu=1-5.5*亩**(0.66)+3.77*亩
其他:
nu=0.819**(-11.5*亩)+0.0975**(-70.1*亩)
打印nu
如何告诉Python将正确的数字输入?一个问题是您没有在
for
循环中使用项。您也不会附加到列表或分配到新数组来存储结果。在任何情况下,NumPy都具有为此任务设计的特定功能。例如,使用:
def func1(x):
返回1-5.5*x**(0.66)+3.77*x
def func2(x):
返回0.819**(-11.5*x)+0.0975**(-70.1*x)
res=np.其中(mu<0.009,func1(mu),func2(mu))
虽然您可能会觉得这是低效的,因为处理的计算量是所需计算量的两倍,但矢量化操作的好处远远超过了这一点。谢谢您,jpp。您提供的答案与预期一样有效!
def func1(x):
return 1 - 5.5 * x**(0.66) + 3.77 * x
def func2(x):
return 0.819**(-11.5*x)+0.0975**(-70.1*x)
res = np.where(mu < 0.009, func1(mu), func2(mu))