似乎从int数组中减去float32的值默认会导致float64数组。有没有办法避免这种情况,而是将float32用作结果的数据类型?
numpy.subtract不允许指定dtype参数。
对我而言,实现此目标的唯一方法是在将int数组转换为float32之前,有效地减去两个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)
版画
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
之前手动转换为float32似乎比自动转换为float64慢。
最佳答案
作为ufunc,np.subtract
接受在其主文档页面上未列出的several keyword arguments。 dtype是其中之一,因此您可以说:np.subtract(a, b, dtype='float32')
并获得所需的结果。
如果将来有帮助,np.promote_types
会告诉您可以安全地将两个dtype都强制转换为的最小dtype,而np.result_type
会告诉您dtype Numpy的转换规则默认会产生。
关于python - 如何在NumPy中为算术运算指定结果数据类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41677264/