gpt4 book ai didi

带有 numpy 数组的 Python 生成器

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

我想创建一个可以动态返回数组的生成器。例如:

import numpy as np
def my_gen():
c = np.ones(5)
j = 0
t = 10
while j < t:
c[0] = j
yield c
j += 1

用一个简单的for循环:

for g in my_gen():
print (g)

我得到了我想要的。但是使用 list(my_gen()),我得到了一个始终包含相同内容的列表。

我深入挖掘了一下,发现当我用 yield c.tolist() 而不是 yield c 时,一切正常...

我无法解释自己为什么会出现这种奇怪的行为......

最佳答案

那是因为c总是指向相同的 numpy 数组引用,你只是在更改 c 中的元素在生成器函数中。

简单打印时,它会打印完整的 c array at that particular moment ,因此您可以正确打印值。

但是当你使用 list(my_gen()) 时,您继续添加对 c 的相同引用numpy 数组添加到列表中,因此对该 numpy 数组的任何更改也会反射(reflect)在列表中先前添加的元素中。

当你这样做时,它对你有用 yield c.tolist() ,因为这会从 numpy 数组创建一个新列表,因此您不断将新列表对象添加到 list因此将来会更改为 c不会反射(reflect)在之前添加的列表中。

关于带有 numpy 数组的 Python 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32989114/

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