美文网首页
append操作被覆盖

append操作被覆盖

作者: morie_li | 来源:发表于2019-02-24 17:14 被阅读0次

今天在写一个append操作时,发现前面的数据总是被覆盖

thetas = []
theta = np.ones((n, 1))
while count < maxloop and error > eplsion:
    count += 1
    h = sigmoid(x, theta)
    thetas.append(theta)
    theta -= rate * (1.0/m) * x.T * (h-y)
    error = J(theta, x, y)
    errors.append(error)
    if error < eplsion:
        break
print thetas

无论怎么修改,结果总是

[array([[ 0.46485318],
[-0.31201893],
[ 1.56900716]]),
array([[ 0.46485318],
[-0.31201893],
[ 1.56900716]]),
array([[ 0.46485318],
[-0.31201893],
[ 1.56900716]]),
array([[ 0.46485318],
[-0.31201893],
[ 1.56900716]]),
array([[ 0.46485318],
[-0.31201893],
[ 1.56900716]])]

后来找到原因:
python中,append只是拷贝了对象的引用而非对象本身,称之为浅拷贝。theta被append给thetas的是一个地址。thetas放在循环外时,每次赋给thetas的只是一个相同的位置,而这个位置的值发生了改变,相应地表现为后面的值覆盖前面的值;
解决方法:
1.把theta的初始化放在循环内,即每循环一次生成一个list,用不同的位置,这样赋给thetas的值就不会发生改变(但是这里因为thetas的值要迭代,所以这个方法不行);
2.使用深拷贝copy.deepcopy:
a.直接复制:对对象的引用;
b.浅拷贝:拷贝父对象,但不拷贝对象内部的子对象;
c.深拷贝:完全拷贝父对象及其子对象,生成一个新的对象,则对原父对象和子对象的改变无法引起新变量的改变,两者完全独立;
在此处使用copy.deepcopy,即每次循环都拷贝theta生成一个新的对象,将其放入thetas。

相关文章

  • append操作被覆盖

    今天在写一个append操作时,发现前面的数据总是被覆盖 无论怎么修改,结果总是 后来找到原因:python中,a...

  • pandas拼接方法

    Pandas拼接操作(concat,merge,join和append)的区别 append, merge, co...

  • 切片操作 append

    append 操作切片,可以追加内容,也可以变相的去除切片中某个子元素,需要注意的是切片本身不存储数据,操作的都是...

  • jQuery 函数

    Dom操作常用方法 .append()/.prepend() .append()函数用于向每个匹配元素内部的末尾位...

  • python list append 被覆盖问题

    遇到一个小问题,在for循环中,将字典内容追加到列表中时发现被覆盖,在这里记录一下~ 在这里输出的是: 将代码修改...

  • jQuery:dom的增删查改

    jQuery中对dom的操作方法有: 1,增加元素子节点:append():$(选择器).append(strin...

  • Python3学习笔记——列表(二)

    对列表元素的操作 1、增加元素 1.1 append()方法 append()方法用于将元素添加到列表末尾。 输出...

  • Spark 实现MySQL update操作

    背景 目前 spark 对 MySQL 的操作只有 Append,Overwrite,ErrorIfExists,...

  • 01-01 list 处理方法

    1.append 列表.append(元素) - 在指定的列表的最后添加指定的元素。(注意:这个操作不会产生新的列...

  • 循环中append值被覆盖的问题

    list.append()在循环中会有赋值覆盖 百度了一下也没怎么看明白 好像是因为append(ans)这里传的...

网友评论

      本文标题:append操作被覆盖

      本文链接:https://www.haomeiwen.com/subject/twwfyqtx.html