【问题标题】:If/Then apply different function depending on each value in arrayIf/Then 根据数组中的每个值应用不同的函数
【发布时间】:2019-05-27 12:35:26
【问题描述】:

我有一个据称很容易解决的问题,但我仍然无法弄清楚:

我有一个包含 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

对于数组中的所有其他数字,我需要将它们代入方程 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

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

【问题讨论】:

    标签: python arrays python-2.7 numpy


    【解决方案1】:

    一个问题是您没有在for 循环中使用item。您也不是附加到列表或分配给新数组来存储结果。无论如何,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))
    

    虽然您可能觉得处理的计算量是所需的两倍,但效率低下,但矢量化操作的好处远远超过了这一点。

    【讨论】:

    • 谢谢你,jpp。您提供的答案按预期工作!
    猜你喜欢
    • 2017-03-29
    • 1970-01-01
    • 2012-08-15
    • 2012-03-26
    • 1970-01-01
    • 2022-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多