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
(/の再利用)への変更は許可されません。これを「修正」するには、dtype
のa
を最初からフロートにする必要があります。
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
ではありません正確に同じです。最初の配列は新しい配列を作成し、2番目の配列は既存の配列を再利用します)。結果のdtypeが異なる場合は使用できません。整数除算が必要な場合は、//=
割り当て操作:
>>> a = np.array([2, 4, 6])
>>> a //= 2
>>> a
array([1, 2, 3])