当前位置: 首页 > 面试题库 >

Numpy除法和Python除法之间的区别?

隆飞宇
2023-03-14
问题内容

numpy.divide 和Python斜杠 / 运算符之间 有何
异同?据我所知,它们的行为相同,均实现了按元素划分。该numpy的文件中提到:

numpy.divide(x1,x2)…就数组广播而言,等效于x1 / x2。…

暗示np.divide(x1,x2)并不 完全 等同于x1 / x2。我运行了以下代码片段来比较它们的速度:

import numpy as np
import time

a = np.random.rand(10000, 10000)
b = np.random.rand(10000, 10000)

tic = time.time()
c = a / b
toc = time.time()
print("Python divide took: ", toc - tic)

tic = time.time()
c = np.divide(a, b)
toc = time.time()
print("Numpy divide took: ", toc - tic)

看来Python分隔通常运行得更快,这使我相信Numpy分隔实现了一些额外的功能。

任何帮助深表感谢!


问题答案:

这里似乎没有任何实际的性能差异。

当我运行您的代码并交换两个测试时,以第二个为准。

当我使用timeit适当的基准html" target="_blank">测试时,它们大约需要相同的时间(540ms/与539ms divide)。

我的猜测是,您所测量的差异是对数组进行malloc的时间-第一个需要这样做,第二个可以重用刚释放的内存。

但是,让我们看一下源代码。中的代码generate_umath.py创建实际的代码,并为的插槽分配相同的代码Ufunc(名为numpy.core.umath.divide)。(如果你想知道为什么我抬起头,当你使用和替代和,看到评论后它删除了Python
3中,因为它会被它别名。)IIRC,实际的代码是类型开关和大小最终会出现在中的一个循环模板中。np.floor_divide``PyNumber_FloorDivide``np.ndarray``floor_divide``divide``/``floor_divide``//``divide``true_divideloops.c.src

因此,除了显式的Ufunc包装器代码与内置method- wrapper包装器代码(对于任何不是很小的数组都无关紧要)之间的差异之外,它们最终都位于同一位置。



 类似资料:
  • 问题内容: 将一个使用在另一个上是否有好处?在Python 2中,它们似乎都返回相同的结果: 问题答案: 在将返回2.5并且将返回2。前者是浮点除法,后者是地板除法,有时也称为整数除法。 在或更高版本的2.x行中,除非执行,否则整数没有区别,这会使采取3.0的行为。 不管将来的进口是什么,都会归还,2.0因为这是操作的地板分割结果。

  • 问题内容: `>>> a=[1,2,3] a.remove(2) a [1, 3] a=[1,2,3] del a[1] a [1, 3] a= [1,2,3] a.pop(1) 2 a [1, 3] ` 以上三种从列表中删除元素的方法之间有什么区别吗? 问题答案: 是的,删除第一个匹配值,而不是特定的索引: del 删除特定索引处的项目: 并pop从特定索引处删除该项目并返回。 它们的错误模式也

  • 问题内容: 内置和之间有什么区别? 例 输出: 我发现这里说的是: float32单精度浮点数:符号位,8位指数,23位尾数 找不到内置格式。 问题答案: Python的标准类型是C :http : //docs.python.org/2/library/stdtypes.html#typesnumeric NumPy的标准相同,并且也相同。

  • 问题内容: 我正在使用Oracle数据库,但对Drop和Purge命令有些困惑。实际上,对于我来说,两者都做同样的事情。从数据库中删除带有模式的表。两者的主要区别是什么? 删除表表名; 删除表表名清除; 问题答案: 通常,如果表被删除,则将其移入回收站(从Oracle 10g开始)。但是,如果还指定了purge修饰符,则无法从数据库中删除(完全)删除该表。

  • 问题内容: 用修饰的功能和用修饰的功能有什么区别? 问题答案: 也许有点示例代码将有助于:发现其中的差别在调用签名,并且: 以下是对象实例调用方法的常用方法。对象实例,a作为第一个参数隐式传递。 使用时,对象实例的类作为第一个参数而不是隐式传递。 你也可以使用该类进行呼叫。实际上,如果你将某些东西定义为类方法,则可能是因为你打算从类而不是从类实例调用它。本来会引发,但效果很好: 人们发现类方法的一

  • 问题内容: 在报表汇总中,我构建了一些表。后来我根本不需要它们了。有人提到要截断它们,因为这样会更快。 问题答案: 从表中删除记录会记录每次删除,并为删除的记录执行删除触发器。截断是一种更强大的命令,可清空表而不记录每一行。由于需要检查每一行上的外键,因此SQL Server阻止您使用带有引用该表的外键的表来对其进行截断。 截断通常是超快的,非常适合清除临时表中的数据。它的确保留了表的结构以备将来