gpt4 book ai didi

python - 为什么整数指数的 numpy.power 更慢?

转载 作者:太空狗 更新时间:2023-10-29 20:45:35 34 4
gpt4 key购买 nike

我随机选择了这些数字,但这些结果似乎是一致的 --- 浮点指数比整数指数快 25%-50%。这些处理方式有何不同?

In [209]: %timeit -n 100000 -r 100 np.power(3.71242, 7)
100000 loops, best of 100: 3.45 µs per loop

In [210]: %timeit -n 100000 -r 100 np.power(3.71242, 7.0)
100000 loops, best of 100: 1.98 µs per loop

最佳答案

np.power 是一个 universal function (ufunc)。这些函数可用于具有各种不同数据类型的标量和数组,但必须首先检查输入值的类型,以便它们可以确定使用哪个内部循环来生成合适的输出值。

如果输入类型没有映射到 ufunc 的任何预定义循环,ufunc 将尝试 cast the input values to suitable types (除非另有说明)。这种输入值的检查和转换会产生相关的性能成本,解释问题中观察到的时间。

types ufunc 的属性显示输入数据类型将如何映射到输出数据类型。以下是 np.power 的映射列表:

>>> np.power.types # 'input input -> output'
['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L', 'qq->q',
'QQ->Q', 'ee->e', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G', 'OO->O']

float 属于字符编码'g',Python整数属于'l'。可以找到这些字符代码的完整列表 here .

请注意,对于此 ufunc,两个输入值的数据类型必须相同。例如,floatint 输入数据类型的混合没有映射。

但我们仍然可以为 np.power 提供不同的数据类型,让它将值转换为适当的数据类型。对于 floatint,返回一个 float64 数字:

>>> np.power(3.71242, 7).dtype
dtype('float64')

在上面您可以看到映射到 float64 字符代码 g 的唯一输入是另外两个 g 值:' gg->g'

因此,在幕后,np.power(3.71242, 7) 获取了一个 Python float 和一个 Python int 并且必须决定它可以安全地重铸成什么类型​​。 int 值已安全地提升为浮点类型 g。然后 ufunc 知道要运行哪个循环并返回另一个 g 值。

出于这个原因,不混合输入数据类型可以为 np.power 带来更好的性能。

关于python - 为什么整数指数的 numpy.power 更慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26770996/

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