Numpy divide 和 Python divide 之间的区别?
Differences between Numpy divide and Python divide?
numpy.divide和Python斜线运算符/有什么异同?据我所知,它们的行为相同,都实现了按元素划分。 Numpy documentation 提到:
numpy.divide(x1, x2) ... Equivalent to x1 / x2 in terms of array-broadcasting. ...
暗示 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
进行适当的基准测试时,它们花费的时间大致相同(/
为 540 毫秒,divide
为 539 毫秒)。
我的猜测是,您测量的差异是 malloc 数组的时间——第一个需要这样做,第二个可以重用刚刚释放的内存。
但让我们看看来源。 generate_umath.py
creates the actual code, and it's assigning the same Ufunc
(named numpy.core.umath.divide
) to np.floor_divide
and to the PyNumber_FloorDivide
slot for np.ndarray
. (If you're wondering why I looked up floor_divide
when you're using divide
and /
instead of floor_divide
and //
, see the comment later where it deletes divide
for Python 3 because it will be aliased it to true_divide
.) IIRC, the actual code is a switch on types and sizes that ultimately ends up in one of the loop templates in loops.c.src
.
中的代码
因此,除了显式 Ufunc 包装器代码与内置 method-wrapper
包装器代码的差异(这与任何非微型数组无关),它们最终都在同一个地方。
numpy.divide和Python斜线运算符/有什么异同?据我所知,它们的行为相同,都实现了按元素划分。 Numpy documentation 提到:
numpy.divide(x1, x2) ... Equivalent to x1 / x2 in terms of array-broadcasting. ...
暗示 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
进行适当的基准测试时,它们花费的时间大致相同(/
为 540 毫秒,divide
为 539 毫秒)。
我的猜测是,您测量的差异是 malloc 数组的时间——第一个需要这样做,第二个可以重用刚刚释放的内存。
但让我们看看来源。 generate_umath.py
creates the actual code, and it's assigning the same Ufunc
(named numpy.core.umath.divide
) to np.floor_divide
and to the PyNumber_FloorDivide
slot for np.ndarray
. (If you're wondering why I looked up floor_divide
when you're using divide
and /
instead of floor_divide
and //
, see the comment later where it deletes divide
for Python 3 because it will be aliased it to true_divide
.) IIRC, the actual code is a switch on types and sizes that ultimately ends up in one of the loop templates in loops.c.src
.
因此,除了显式 Ufunc 包装器代码与内置 method-wrapper
包装器代码的差异(这与任何非微型数组无关),它们最终都在同一个地方。