gpt4 book ai didi

python - 迭代更新 Lambda 函数

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:03 25 4
gpt4 key购买 nike

更新 #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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com