向Numpy对象数组指定行追加元素时所有行同步更新的问题求助
向Numpy对象数组指定行追加元素时所有行同步更新的问题求助
嘿,我太懂你这个困扰了!这其实是Numpy对象数组里一个非常容易踩的小坑,核心原因和Python可变对象的引用机制有关。
你用myArr.fill([])的时候,看起来是给数组的每个位置都塞了一个空列表,但实际上,你是把同一个空列表对象的引用赋值给了数组里的每一个元素。因为列表是可变类型,不管你通过哪个索引去调用.append(),本质上都是在修改那个唯一的列表对象,所以所有行都会跟着同步变化,这就导致了你看到的“一修改全变”的情况。
那怎么解决呢?给你两个简单的方案:
方案一:逐个初始化独立的空列表
不用fill(),而是循环给每个位置单独创建空列表,确保每个元素都是独立的对象:myArr = np.empty(10, dtype=object) for i in range(len(myArr)): myArr[i] = []方案二:用列表推导式直接创建数组
这是更简洁的写法,一次性生成包含10个独立空列表的对象数组:myArr = np.array([[] for _ in range(10)], dtype=object)
不管用哪个方案,之后再执行myArr[2].append(1),你就能得到想要的结果了:
array([list([]), list([]), list([1]), list([]), list([]), list([]), list([]), list([]), list([]), list([])], dtype=object)
备注:内容来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

