如何仅修改字典中指定键对应NumPy数组的指定行?
问题原因
你遇到的问题核心是引用复用:用itertools.repeat(np.zeros((5, 2)))时,并没有生成4个独立的5×2数组,而是把同一个numpy数组对象的引用重复了4次。字典里所有键指向的都是同一个数组,所以修改键20对应的数组行,其他键的数组也会同步变化。
解决方案
要让每个键对应独立的数组,需要每次调用np.zeros((5, 2))生成新的数组对象,推荐用以下两种方式:
方式一:字典推导式(最简洁)
import numpy as np my_dict = {key: np.zeros((5, 2)) for key in [10, 20, 30, 40]} my_dict[20][1] = [2, -4] print(my_dict)
方式二:手动生成独立数组序列
import numpy as np keys = [10, 20, 30, 40] # 用列表推导式生成4个独立的数组 arrays = [np.zeros((5, 2)) for _ in keys] my_dict = dict(zip(keys, arrays)) my_dict[20][1] = [2, -4] print(my_dict)
原理说明
列表推导式里每次执行np.zeros((5, 2))都会创建一个全新的numpy数组对象,每个键对应的数组都是独立的内存空间,修改其中一个不会影响其他数组的内容。
内容的提问来源于stack exchange,提问作者andrerud
相关产品推荐
相关产品推荐

