Tom*_*ale 12 python arrays numpy numpy-broadcasting
在numpy数组上,为什么我可以成功使用/ 2:
>>> a=np.array([2, 4, 6])
>>> a = a / 2
>>> a
array([ 1., 2., 3.])
Run Code Online (Sandbox Code Playgroud)
但我不能用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
Run Code Online (Sandbox Code Playgroud)
我已经看过numpy Issue 6464,但是从阅读它并不理解,链接的发行版注意到这不起作用的原因.
有没有办法/=像预期的那样开始工作?
Fly*_*ler 11
正如评论中指出的那样,在使用时,不允许从int(即a创建方式)更改为float(是/的重用)/=。“修理”这个dtype的a只是必须从一开始就浮动:
a=np.array([2, 4, 6], dtype=np.float64)
a/=2
print(str(a))
>>>array([1., 2., 3.])
Run Code Online (Sandbox Code Playgroud)
如注释中所述,a / 2生成一个float数组,但类型a为整数.由于NumPy的赋值运算符被优化为重用相同的数组(即a = a + 2并且a += 2不完全相同,第一个创建新数组,而第二个只重用现有数组),当结果具有不同的dtype时,不能使用它们.如果你想要的是一个整数除法,你可以使用//=赋值操作:
>>> a = np.array([2, 4, 6])
>>> a //= 2
>>> a
array([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)