自動丸めを使用してint16
配列とfloat
配列を乗算したいのですが、これは失敗します。
import numpy
A = numpy.array([1, 2, 3, 4], dtype=numpy.int16)
B = numpy.array([0.5, 2.1, 3, 4], dtype=numpy.float64)
A *= B
私は得ます:
TypeError:キャストルール 'same_kind'では、uftype乗算出力をdtype( 'float64')からdtype( 'int16')にキャストできません
これを解決する2つの方法:
あなたはこれを解決することができます置き換えることによって
A *= B
with
A = (A * B)
orと
numpy.multiply(A, B, out=A, casting='unsafe')
次のように、 broadcasting
を使用して2つの配列を乗算し、整数部分のみを取得できます。
In [2]: (A*B).astype(int)
Out[2]: array([ 0, 4, 9, 16])
タイミング制約:
In [8]: %timeit (A*B).astype(int)
1000000 loops, best of 3: 1.65 µs per loop
In [9]: %timeit np.multiply(A, B, out=A, casting='unsafe')
100000 loops, best of 3: 2.01 µs per loop
import numpy as np
A = np.float_(A)
A *= B
これを試して。私はあなたが失敗する別の配列型だと思います。
キャスト