Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Numpy赋值行为_Python_Numpy - Fatal编程技术网

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)