web-dev-qa-db-ja.com

numpy配列では/ =を使用できません

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 を見ましたが、それを読んでも理解できません。リンクされたリリースには、これが機能しない理由が記載されています。

/=を期待どおりに動作させる方法はありますか?

13
Tom Hale

コメントで指摘されているように、/=を使用すると、int(aの作成方法)からfloat(/の再利用)への変更は許可されません。これを「修正」するには、dtypeaを最初からフロートにする必要があります。

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

コメントで述べたように、a / 2はfloat配列を生成しますが、aの型は整数です。 NumPyの代入演算子は、同じ配列(つまりa = a + 2およびa += 2ではありません正確に同じです。最初の配列は新しい配列を作成し、2番目の配列は既存の配列を再利用します)。結果のdtypeが異なる場合は使用できません。整数除算が必要な場合は、//=割り当て操作:

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