[英]Python: How to keep variable memory location across assignment?
我对Python还是很陌生,所以如果这个问题很愚蠢,请原谅我。 我无法通过Google找到答案...
我在我的代码中使用PyFFTW,它具有一个计划阶段,在该阶段中,您要向其传递两个变量(源/目标),它们是您要从中转换到的。 然后,当您调用FFT时,将在计划阶段在那些内存位于的确切存储空间上进行操作。 因此,将需要对变量执行任何操作,以使这两个变量在内存中的位置不变。 我发现了运算符*=
, +=
等,它们是针对标准数学运算符执行的。 但是,在我的程序中,我需要对变量应用一个函数,该函数应将其返回到相同的内存位置。 这个怎么做?!
我最初通过以下方式使用切片:
a[:] = func(a)[:]
但是我才意识到,这非常慢(我的代码慢了约10%)。 那么有人知道该怎么做吗?
任何帮助都非常感谢。 提前致谢!
所以最后我找不到一个令人满意的解决方案。 我最初最终使用了以上delnan提出的解决方案
a[:] = func(a)[:]
并预先分配一定大小的数组。 很抱歉将此添加为我的答案,因为我不知道如何/是否有可能接受delnans注释作为答案...
您的变量是可变类型,因此您的函数可以直接对其进行操作。
您仍然无法使用将要创建副本和/或进行新赋值的功能和运算符(与您尚未使用的功能和运算符相同),但是在函数外部可以看到函数参数的直接突变。功能。
这是您要尝试做的事情吗?
def time10(a):
""" multiple the elements by 10 in-place """
for i in xrange(len(a)):
a[i] *= 10
# returning a is optional. I think it maybe useful for use to chain the operation
return a
>>> a = range(10)
>>> time10(a)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> b = range(10)
>>> time10(time10(b))
[0, 100, 200, 300, 400, 500, 600, 700, 800, 900]
>>> b
[0, 100, 200, 300, 400, 500, 600, 700, 800, 900]
>>>
返回数组后,原始代码将复制该数组。 通常这不是有用的做法,它会导致运行时间变慢。
如何使用本地值并将其引用为全局值。 我想它可能会更快...
global a
a = []
def test():
global a
b = [1,2,3,4]
a = b
....
嗯..我也必须使用cProfiler进行测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.