gpt4 book ai didi

python - 在 python 中使用这段代码有什么好处? (先设置 i = [0],然后设置 i[0] += size)

转载 作者:太空宇宙 更新时间:2023-11-04 10:23:27 25 4
gpt4 key购买 nike

我正在读取带有模块 Theano 的 python 脚本用过的。我对以下代码感到困惑。

import numpy as np 
import theano.tensor as T
lparam = T.dvector('lparam') # packed parameters
func = lambda expr: (theano.function([lparam],expr),expr)

i = [0]
def read_param(size):
ret = lparam[i[0]:i[0]+size]
i[0] += size
return ret

函数 read_param 在下面的函数中使用。

N = 20
unpack_param, unpack_param_expr = func(T.stack(
read_param(N), # sigmoid energy
read_param(N), # sigmoid switching z
T.exp(read_param(N)), # sigmoid scale (>0)
read_param(N), # gaussian energy
read_param(N), # gaussian location
T.exp(read_param(N)))) # gaussian scale (1/2sigma**2)


def pack_param(param):
return np.concatenate((
param[0],
param[1],
np.log(param[2]),
param[3],
param[4],
np.log(param[5])), axis=0)

听说它使用了“闭包”的概念,在写作和阅读上都有优势。但我不确定它为什么以及如何工作。

最佳答案

我很难看到当前代码的优势。 i 被创建为一个列表,因此它可以在函数内改变,但正如 warvariuc 所示,您可以只使用 global 来实现同样的事情。

下面是我如何“用 Python 方式”做同样的事情:

class ParamReader(object):
def __init__(self, params):
self.params = params
self.i = 0

def read(self, size):
ret = self.params[self.i:(self.i + size)]
self.i += size
return ret

# Dummy values for lparam as I don't have theano
lparam = list(range(100))
reader = ParamReader(lparam)

reader.read(5)
Out[8]: [0, 1, 2, 3, 4]

reader.read(6)
Out[9]: [5, 6, 7, 8, 9, 10]

读取函数必须保持状态,所以只使用一个简单的类似乎是一个显而易见的选择。

关于python - 在 python 中使用这段代码有什么好处? (先设置 i = [0],然后设置 i[0] += size),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30860533/

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