Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 Can';t在numpy数组上使用/=_Python_Arrays_Numpy_Array Broadcasting - Fatal编程技术网

Python Can';t在numpy数组上使用/=

Python Can';t在numpy数组上使用/=,python,arrays,numpy,array-broadcasting,Python,Arrays,Numpy,Array Broadcasting,在numpy阵列上,为什么我可以成功使用/2: >>> a=np.array([2, 4, 6]) >>> a = a / 2 >>> a array([ 1., 2., 3.]) 但是我不能使用a/=2 >>> a=np.array([2, 4, 6]) >>> a /= 2 Traceback (most recent call last): File "<stdin>", lin

numpy
阵列上,为什么我可以成功使用
/2

>>> a=np.array([2, 4, 6])
>>> a = a / 2
>>> a
array([ 1.,  2.,  3.])
但是我不能使用
a/=2

>>> a=np.array([2, 4, 6])
>>> a /= 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: No loop matching the specified signature and casting
was found for ufunc true_divide
>a=np.array([2,4,6])
>>>a/=2
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:没有与指定签名和强制转换匹配的循环
已为ufunc true_divide找到
我已经看到了,但从阅读它和链接的发行说明中,我不明白这不起作用的原因


有没有办法让
/=
按预期工作?

正如评论中指出的那样,在使用
/=
时,不允许将
int
(即
a
的创建方式)更改为
float
(这是/)的结果。要“修复”此问题,
a
dtype
必须从一开始就是一个浮点数:

a=np.array([2, 4, 6], dtype=np.float64)
a/=2
print(str(a))
>>>array([1., 2., 3.])

如注释中所述,
a/2
生成浮点数组,但
a
的类型是整数。由于NumPy的赋值运算符经过优化以重用相同的数组(即
a=a+2
a+=2
不完全相同,因此第一个运算符创建一个新数组,而第二个运算符仅重用现有数组),因此当结果具有不同的数据类型时,不能使用它们。如果需要整数除法,可以使用
/=
赋值操作:

>>> a = np.array([2, 4, 6])
>>> a //= 2
>>> a
array([1, 2, 3])

注意:在第一种情况下,新的
a
是一个浮点数。不允许第二个用户更改数据类型。