Python Numpy赋值行为
Python Numpy赋值行为,python,numpy,Python,Numpy,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
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
数组([-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[a0]=1
使用上面的代码,我想替换a中的元素,但b也会更改。。。您能解释一下错误在哪里吗?通过使用表达式
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
>>>b=numpy.数组([-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
阵列([-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>>a[a>0]=1
>>>a
数组([0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,。,
0., 1., 1., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0.,
0., 0., 0., 0.])
>>>b
阵列([-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
更新
我认为没有任何非numpy方式会导致与您的案例完全兼容。通过使用表达式
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
>>>b=numpy.数组([-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
阵列([-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>>a[a>0]=1
>>>a
数组([0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,。,
0., 1., 1., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0.,
0., 0., 0., 0.])
>>>b
阵列([-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
更新
我不认为有任何非numpy方式会导致与您的案例完全兼容。当您执行
a=b
时,您对b
进行了命名引用,因此a
和b
是同一对象上的视图,如果您想要副本,请使用np
In [35]:
a = np.copy(b)
a[a<= 0] = 0
a[a> 0] = 1
a
Out[35]:
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.])
In [36]:
b
Out[36]:
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])
[35]中的
a=np.副本(b)
a[a0]=1
A.
出[35]:
数组([0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,。,
0., 1., 1., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0.,
0., 0., 0., 0.])
在[36]中:
B
出[36]:
阵列([-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
时,您对b
进行了命名引用,因此a
和b
是同一对象上的视图,如果您需要副本,请使用np.c
import copy
a = copy.copy(b)
import numpy
a = np.copy(b)