如果/然后根据数组中的每个值应用不同的函数

时间:2018-12-30 16:58:07

标签: python arrays python-2.7 numpy

我有一个容易解决的问题,但我仍然无法解决:

我有一个包含1000个数字的数组,称为“ mu”,如下所示:

array([2.25492522e-01, 2.21059993e-01, 2.16757006e-01,....)

现在我需要将这些值插入两个不同的函数中: 对于数组中小于0.009的数字,我需要使用Equation1:

nu = 1 - 5.5 * mu**(0.66) + 3.77 * mu

对于数组中的所有其他数字,我需要将它们插入Equation2:

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

如何告诉Python输入正确的数字?

1 个答案:

答案 0 :(得分:3)

一个问题是您没有在item循环中使用for。您也不会追加到列表或分配新的数组来存储结果。无论如何,NumPy具有为此任务设计的特定功能。例如,使用numpy.where

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))

虽然您可能会觉得效率低下,因为处理的计算量是所需数量的两倍,但矢量化运算的优势却远远超过了它。