杨魅力
时间基本相同。正如其他人指出的那样,没有任何类型的硬件或多核并行化,只是解释 Python 和编译numpy函数的混合。In [289]: x = np.ones((1000,1000))In [290]: timeit 1-np.log(x) 15 ms ± 1.94 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)In [291]: timeit np.subtract(np.ones_like(x), np.log(x)) 18.6 ms ± 1.89 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)取出np.ones_like定时循环:In [292]: %%timeit y = np.ones_like(x) ...: np.subtract(y,np.log(x)) ...: ...: 15.7 ms ± 441 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)2/3 的时间花在log函数上:In [303]: timeit np.log(x) 10.7 ms ± 211 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)In [306]: %%timeit y=np.log(x) ...: np.subtract(1, y) 3.77 ms ± 5.16 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)生成方式的变化1只是时间的一小部分。使用“广播”,使用标量和数组或数组和数组进行数学运算同样容易。,1无论是标量(实际上是一个形状为 的数组()),被广播到 (1,1),然后到 (1000,1000),所有这些都没有复制。