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
是一个浮点数。不允许第二个用户更改数据类型。