Python中将数组添加至列表时覆盖已有值的解决方法
正确向列表添加numpy数组的方法
你遇到的问题根源是:numpy数组是可变对象,你循环里一直复用同一个show_img数组,每次fill(x)只是修改这个数组的内容,而append到列表里的是数组的引用,不是独立的副本。所以列表里所有元素其实指向同一个内存地址的数组,循环结束后数组的值是最后一次填充的9,自然所有元素看起来都是9。
下面是两种解决方法:
方法1:每次循环创建新数组
把数组初始化的代码放到循环内部,每次迭代都生成一个新的数组对象:
import numpy as np ims = [] for x in range(10): show_img = np.zeros([2,2,3], dtype=np.uint8) show_img.fill(x) ims.append(show_img) # 验证前3个元素 for arr in ims[:3]: print(arr)
方法2:添加数组的副本
如果需要复用原数组对象,每次append时添加数组的副本(用copy()方法),这样列表里的每个元素都是独立的数组:
import numpy as np ims = [] show_img = np.zeros([2,2,3], dtype=np.uint8) for x in range(10): show_img.fill(x) ims.append(show_img.copy()) # 添加副本而非原数组引用 # 验证前3个元素 for arr in ims[:3]: print(arr)
这样修改后,列表ims里就会包含从0到9填充的所有数组,符合你的预期结果。
内容的提问来源于stack exchange,提问作者Widhold
相关产品推荐
相关产品推荐

