web-dev-qa-db-ja.com

numpy intおよびfloat配列の乗算:dtypeからのufunc乗算出力をキャストできません

自動丸めを使用して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')にキャストできません

15
Basj

これを解決する2つの方法:

あなたはこれを解決することができます置き換えることによって

A *= B

with

A = (A * B)

or

numpy.multiply(A, B, out=A, casting='unsafe')
13
makis

次のように、 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
3
Nickil Maveli
import numpy as np

A = np.float_(A)
A *= B

これを試して。私はあなたが失敗する別の配列型だと思います。

キャスト

2
Ahmet İlgin