不能在 numpy 数组上使用 /=
Can't use /= on numpy array
在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
我看过 numpy Issue 6464,但不明白阅读它和链接的发行说明这不起作用的原因。
有什么方法可以让 /=
按预期工作吗?
正如评论中所指出的,从 int
(这是 a
的创建方式)到 float
(这是 / 的结果)的更改是不允许的使用 /=
。要 "fix" 这个 a
的 dtype
从一开始就必须是一个浮点数:
a=np.array([2, 4, 6], dtype=np.float64)
a/=2
print(str(a))
>>>array([1., 2., 3.])
评论中提到,a / 2
产生的是float数组,而a
的类型是整型。由于 NumPy 的赋值运算符经过优化以重用相同的数组(即 a = a + 2
和 a += 2
不 完全相同 ,第一个创建一个新数组,而第二个只是重用现有的),当结果具有不同的 dtype 时,您不能使用它们。如果你想要的是整数除法,可以使用//=
赋值操作:
>>> a = np.array([2, 4, 6])
>>> a //= 2
>>> a
array([1, 2, 3])
在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
我看过 numpy Issue 6464,但不明白阅读它和链接的发行说明这不起作用的原因。
有什么方法可以让 /=
按预期工作吗?
正如评论中所指出的,从 int
(这是 a
的创建方式)到 float
(这是 / 的结果)的更改是不允许的使用 /=
。要 "fix" 这个 a
的 dtype
从一开始就必须是一个浮点数:
a=np.array([2, 4, 6], dtype=np.float64)
a/=2
print(str(a))
>>>array([1., 2., 3.])
评论中提到,a / 2
产生的是float数组,而a
的类型是整型。由于 NumPy 的赋值运算符经过优化以重用相同的数组(即 a = a + 2
和 a += 2
不 完全相同 ,第一个创建一个新数组,而第二个只是重用现有的),当结果具有不同的 dtype 时,您不能使用它们。如果你想要的是整数除法,可以使用//=
赋值操作:
>>> a = np.array([2, 4, 6])
>>> a //= 2
>>> a
array([1, 2, 3])