gpt4 book ai didi

python - 如何在 NumPy 中指定算术运算的结果数据类型?

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:46 25 4
gpt4 key购买 nike

默认情况下,从 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将告诉您可以安全地转换两个数据类型的最小数据类型,以及 np.result_type会告诉你 dtype Numpy 的转换规则将默认产生。

关于python - 如何在 NumPy 中指定算术运算的结果数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41677264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com