为了账号安全,请及时绑定邮箱和手机立即绑定

同一方程中变量的多个值

同一方程中变量的多个值

Go
四季花海 2021-08-11 17:30:32
A = [18.0,10.0]; B = [13.0,15.0]; C = [10.5,12.0];这些是变量,并考虑像这样的函数def hlf(A,B,C):       return A**(-1.0/2.0)-0.2*B-43+Cprint "T:"hlf(A,B,C)首先,我想在方程中使用 AB 和 C 的第一个值。在我想使用第二个值之后。我怎样才能做到这一点 ?
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

map + list

注意map可以采用多个可迭代参数:


res = map(hlf, A, B, C)


[-34.86429773960448, -33.68377223398316]

在 Python 2.7 中,map返回一个list. 在 Python 3.x 中map返回一个迭代器,因此您可以延迟迭代或通过list,即耗尽list(map(hfl, A, B, C))。


参考:


地图(函数,可迭代,...)


...如果传递了额外的可迭代参数,则函数必须采用那么多参数并并行应用于所有可迭代项中的项目。


zip + 列表理解

您可以zip在列表理解中使用。为清楚起见,您应该避免将参数命名为与变量相同的名称。


A = [18.0,10.0]; B = [13.0,15.0]; C = [10.5,12.0]; 


def hlf(x, y, z):

    return x**(-1.0/2.0) - 0.2*y - 43 + z


res = [hlf(*vars) for vars in zip(A, B, C)]


[-34.86429773960448, -33.68377223398316]


查看完整回答
反对 回复 2021-08-11
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

使用 Numpy 进行矢量化。最佳表现


通常最好尝试使用 numpy 对此类操作进行矢量化,因为可以获得最佳性能结果。当您改为使用循环进行矢量化时,您正在使用所有内核,这是最快的解决方案。您应该使用 numpy 对操作进行矢量化。像这样的东西:


import numpy as np


A = [18.0,10.0]; B = [13.0,15.0]; C = [10.5,12.0];

a = np.array(A)

b = np.array(B)

c = np.array(C)

现在你的函数带有新的向量,比如参数:


def hlf(a_vector,b_vector,c_vector):

    return a_vector**(-1.0/2.0)-0.2*b_vector-43+c_vector

最后调用你的新函数向量化:


print (hlf(a_vector = a,b_vector = b,c_vector = c))

输出:


>>> array([-34.86429774, -33.68377223])


查看完整回答
反对 回复 2021-08-11
?
交互式爱情

TA贡献1712条经验 获得超3个赞

如果你想保持你的功能不变,你应该用以下方式调用它N:


for i in range(N):

    result = hlf(A[i], B[i], C[i])

    print(result)

另一个有趣的方法是用你的函数制作一个生成器:


A = [18.0,10.0]

B = [13.0,15.0]

C = [10.5,12.0];


def hlf(*args):

    i=0

    while i < len(args[0]):

        yield args[0][i]**(-1.0/2.0) - 0.2*args[1][i] - 43 + args[2][i]

        i += 1


results = hlf(A, B, C)

for r in results:

    print(r)

输出:


-34.86429773960448

-33.68377223398316

如果你想练习 python 生成器,最后一个是相当有教育意义的。


查看完整回答
反对 回复 2021-08-11
  • 3 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信