更新#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)
也就是说,我要删除#----------中的所有内容,然后执行以下操作:
^{pr2}$实际上,这是不可能的,因为您将重写前面的f lambda函数。总的来说,我正在努力减少重复查找f的次数。我只想找到它一次,但要对它进行多次求值。 我可以把它破解成这样:
^{3}$我希望这里有人曾经试过这么做。在
我想为一个矩阵生成一个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为行数:
根据您的例子:
编辑2
所以你从
你想让Fn这样
^{pr2}$在这个例子中很简单,例如如果你想要F3
那么
从这里可以推断出
在代码中
相关问题 更多 >
编程相关推荐