python - 迭代更新 Lambda 函数

标签 python lambda

更新 #2:先阅读下文!

------------------------

(特别感谢大家对我的包容)

让我试着让它更简单。如果我事先知道计算函数 f 的算法,但不知道它的最终结果,我将如何在不每次重做算法的情况下对多个函数求值执行此操作?

f = lambda x: x**2
for pt in x:
#-----------
    for i in range(len(some_list)):
        #evaluate algorithm
        if condition 1:
            f = f + 1
        elif condition 2:
            f = f + 2
        else:
            f = f + 3
#-----------
    f(pt)

即假设我想删除 #------------ 中的所有内容并执行以下操作:

f = lambda x: x**2
for i in range(len(some_list)):
    #evaluate algorithm
    if condition 1:
        f = lambda x: f(x) + 1
    elif condition 2:
        f = lambda x: f(x) + 2
    else:
        f = lambda x: f(x) + 3

for pt in x:
    f(pt)

这实际上无法完成,因为您会覆盖以前的 f lambda 函数。总的来说,我正在努力减少我实际上重新查找 f 的次数。我只想找到它一次,但要多次评估它。 我可以破解它来做这样的事情:

f = lambda x: x**2
temp = []
for i in range(len(some_list)):
    #evaluate algorithm
    if condition 1:
        temp.append(lambda x = f(x) + 1)
    elif condition 2:
        temp.append(lambda x = f(x) + 2)
    else:
        temp.append(lambda x = f(x) + 3)
new_f = lambda x: sum([func(x) for func in temp])

for pt in x:
    new_f(pt)

------------------------

我希望这里有人以前尝试过这样做。

我想为矩阵生成一个 lambda 函数,但是我不知道矩阵的先验知识;我通过循环迭代构建它。这个想法是矩阵中的每个元素都依赖于相邻的原子,在伪代码中:

Matrix = zeros((N,N))
for i in atoms:
    Matrix.update

现在问题来了,我有一堆向量,假设 x 有 3 列,假设有 M 行。我想为 x 中的每一行评估这个矩阵。我可以执行以下操作:

for pt in x:
    Matrix = zeros((N,N))
    for i in atoms:
        Matrix.update(@x)

但是,如果我可以简单地生成矩阵的 lambda 函数,这样我就不必每次都重建矩阵,那么计算效率会更高。就像这样:

Matrix = zeros((N,N))
for i in atoms
    l_Matrix = lambda x: Matrix + l_Matrix
l_Matrix(x)

这似乎很难用 python 来完成。不幸的是,您不能在 python 中递归添加 lambda 函数,因为它会删除前一个实例的内存,从而导致递归中断。

我能想到的解决这个问题的唯一方法是制作一个列表,我会在其中附加 lambda 函数,然后在最后将它们全部加在一起,得到我的最终矩阵 lambda函数。 有谁知道更简洁的方法吗?

谢谢!

更新:一个例子。

for pt in x:
    Matrix = zeros((N,N))
    for i in atoms:
        #a bunch of if statements to determine what I do to the matrix element
        Matrix[i,i] = exp(2*pi*1.0j*sum(pt)) #for example

理想情况下,我不想每次想知道 x 点的矩阵时都必须生成矩阵。我宁愿先找到它,然后再对其进行评估。

我很感兴趣,我基本上是在研究原子的紧束缚哈密顿量 - 它们有助于确定化合物或合金的电子结构。有关简单但详细的示例,请参阅:http://cacs.usc.edu/education/phys516/04TB.pdf

最佳答案

您可以使用列表的列表(或 NumPy 库)或嵌套列表。但是,这是实现动态嵌套列表(矩阵)的示例代码。

设 M 为行数:

 M=3
 X=[]
 Matrix=(x, M)
 for i in range(M):
     X.append([int(z) for z in atoms().split()])
     for i in M: //adding column:
        i.append(z)
        if (Matrix.reverse()): // Whenever you get the last element of your desired list
          Matrix[0]
          break;

关于python - 迭代更新 Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36847728/

相关文章:

python - 在 mod_wsgi 上部署 django 应用程序时出现问题

android - 无法在 Kivy 中绘制时钟回调

Python abc 和工厂函数

python - 如何使用 argparse Python 使用 '=' 作为参数分隔符?

Java泛型推理太宽泛?

amazon-web-services - 如何保护公开可用的 lambda 函数?

python - Numpy 在二维数组行中查找一维数组元素

c# - 访问修改后的闭包,这是 ReSharper 错误吗?

c++ - 从 lambda 中的容器中删除 self

c++ - 创建指向运行时创建的函数的函数指针