int配列からfloat32数値を減算しているようですが、デフォルトでfloat64配列になります。これを回避し、代わりに結果のデータ型としてfloat32を取得する方法はありますか?NumPyで算術演算の結果のデータ型を指定する方法は?
numpy.subtractでは、dtype引数を指定できません。
これを実現する唯一の方法は、int配列をfloat32に変換してから、2つのfloat32配列を効果的に減算することです。これはそうなるのでしょうか?
例コード:
import time
import numpy as np
if __name__ == '__main__':
# some int32 array
a = np.arange(1e7)
print('a.dtype={}'.format(a.dtype)) # int32
# subtraction with a python float
t0 = time.clock()
b = a - 5.5
t1 = time.clock()
print('b.dtype={}, took {}s'.format(b.dtype, t1 - t0)) # float64
# a numpy float32
c = np.array(5.5, dtype=np.float32)
print('c.dtype={}'.format(c.dtype)) # float32
# subtraction with the numpy float32
t0 = time.clock()
d = a - c
t1 = time.clock()
print('d.dtype={}, took {}s'.format(d.dtype, t1 - t0)) # float64! why not float32
# convert the int32 to float32
e = a.astype(dtype=np.float32)
print('e.dtype={}'.format(e.dtype)) # float32
# subtract two float32 array
t0 = time.clock()
e = a.astype(dtype=np.float32)
f = e - c
t1 = time.clock()
print('f.dtype={}, took {}s'.format(f.dtype, t1 - t0)) # float32 (finally)
印刷前のfloat32自動のfloat64に変換するよりも遅いと思われるために手動で変換
a.dtype=float64
b.dtype=float64, took 0.0229595559008s
c.dtype=float32
d.dtype=float64, took 0.0223958136306s
e.dtype=float32
f.dtype=float32, took 0.0334388477586s
。
それは文字通り私の最初の考えだったし、私は最初にそれを試してみたと思った。しかし、私はしていないようだ。 promot_typesとresult_typeもありがとう。 – Trilarion