b
是
array([-0.06106568, -0.10843541, -0.0694688 , 0.02464023, -0.03686665,
-0.0582096 , -0.13476669, -0.08505708, 0.00391955, -0.12300518,
-0.01183732, -0.05374973, -0.12300518, -0.05312849, 0.01963862,
0.00155719, -0.10843541, -0.08490177, -0.08505708, -0.02026149,
-0.01777489, 0.01183732, -0.11575136, 0.04278603, -0.0694688 ,
-0.06106568, -0.08755022, -0.01660802, -0.06087603, -0.06582411])
a = b
a[a <= 0] = 0
a[a > 0] = 1
使用上面的代码我想替换a中的元素,但是b也会改变...你能解释一下我的错误在哪里吗?
答案 0 :(得分:3)
通过使用表达式a = b
,您实际上将引用复制到b
。如果您想复制其值,则应该浏览所有b
项并将其值复制到a
。
在numpy中你应该使用copy
函数。
>>> import numpy
>>> b = numpy.array([-0.06106568, -0.10843541, -0.0694688 , 0.02464023, -0.03686665,
... -0.0582096 , -0.13476669, -0.08505708, 0.00391955, -0.12300518,
... -0.01183732, -0.05374973, -0.12300518, -0.05312849, 0.01963862,
... 0.00155719, -0.10843541, -0.08490177, -0.08505708, -0.02026149,
... -0.01777489, 0.01183732, -0.11575136, 0.04278603, -0.0694688 ,
... -0.06106568, -0.08755022, -0.01660802, -0.06087603, -0.06582411])
>>> a = numpy.copy(b)
>>> a
array([-0.06106568, -0.10843541, -0.0694688 , 0.02464023, -0.03686665,
-0.0582096 , -0.13476669, -0.08505708, 0.00391955, -0.12300518,
-0.01183732, -0.05374973, -0.12300518, -0.05312849, 0.01963862,
0.00155719, -0.10843541, -0.08490177, -0.08505708, -0.02026149,
-0.01777489, 0.01183732, -0.11575136, 0.04278603, -0.0694688 ,
-0.06106568, -0.08755022, -0.01660802, -0.06087603, -0.06582411])
>>> a[a<= 0] = 0
>>> a[a> 0] = 1
>>> a
array([ 0., 0., 0., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0.,
0., 1., 1., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0.,
0., 0., 0., 0.])
>>> b
array([-0.06106568, -0.10843541, -0.0694688 , 0.02464023, -0.03686665,
-0.0582096 , -0.13476669, -0.08505708, 0.00391955, -0.12300518,
-0.01183732, -0.05374973, -0.12300518, -0.05312849, 0.01963862,
0.00155719, -0.10843541, -0.08490177, -0.08505708, -0.02026149,
-0.01777489, 0.01183732, -0.11575136, 0.04278603, -0.0694688 ,
-0.06106568, -0.08755022, -0.01660802, -0.06087603, -0.06582411])
有一些本地方法可以做到,但如果你使用数学,强烈建议只使用numpy。
<强>更新强>
我不会想到任何非笨拙的方式,这会导致与你的案件完全兼容。
答案 1 :(得分:1)
当您执行a=b
后,您将b
命名为参考,因此a
和b
是同一对象的视图,如果您想要副本,请使用{ {1}}:
np.copy
答案 2 :(得分:0)
你实际上只是指向一个b,它们都包含相同的列表。基本上python变量是赋予对象的名称。您想在此处创建包含新列表的新对象。你有很多选择:
您可以使用内置的list()
功能:
a = list(b)
或者您可以导入copy
并使用它。
import copy
a = copy.copy(b)
或在numpy的情况下:
import numpy
a = np.copy(b)