Python 如何在NumPy中指定算术运算的结果数据类型?
默认情况下,从int数组中减去float32会得到float64数组。有并没有办法绕过这一点,取而代之的是将float32作为结果的数据类型 不允许指定数据类型参数 对我来说,实现这一点的唯一方法是之前将int数组转换为float32,有效地减去两个float32数组,这两个数组看起来也相当慢。这是应该的吗 示例代码:Python 如何在NumPy中指定算术运算的结果数据类型?,python,numpy,Python,Numpy,默认情况下,从int数组中减去float32会得到float64数组。有并没有办法绕过这一点,取而代之的是将float32作为结果的数据类型 不允许指定数据类型参数 对我来说,实现这一点的唯一方法是之前将int数组转换为float32,有效地减去两个float32数组,这两个数组看起来也相当慢。这是应该的吗 示例代码: import time import numpy as np if __name__ == '__main__': # some int32 array a
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
接受未在其主文档页面上列出的内容。其中一个是dtype,所以你可以这样做,比如说:np.subtract(a,b,dtype='float32')
,然后得到你想要的结果
如果将来有帮助,将告诉您两个数据类型都可以安全地转换到的最小数据类型,并告诉您默认情况下,dtype Numpy的转换规则将让步。尝试这是我的第一个想法,我想我已经尝试过了。但我似乎没有。还感谢推广类型和结果类型。