如何将2D numpy数组的方形或幂(方位)平方或提升?

jmb*_*uis 27 python arrays numpy

我需要对2D numpy数组(elementwise)进行平方,我尝试了以下代码:

import numpy as np
a = np.arange(4).reshape(2, 2)
print a^2, '\n'
print a*a
Run Code Online (Sandbox Code Playgroud)

产量:

[[2 3]
[0 1]]

[[0 1]
[4 9]]
Run Code Online (Sandbox Code Playgroud)

显然,符号a*a给了我想要的结果,而不是a^2.

我想知道是否存在另一种表示法将numpy数组提升到2或N的幂?而不是a*a*a*..*a.

Sau*_*tro 38

最快的方法是做a*aa**2np.square(a)np.power(a, 2)显示是相当慢.

np.power()允许您为每个元素使用不同的指数,而不是2传递另一个指数数组.从@GarethRees的评论我刚刚了解到这个函数会给你不同的结果,a**2或者a*a在你有小容差的情况下变得很重要.

我使用NumPy 1.9.0 MKL 64位计时了一些例子,结果如下所示:

In [29]: a = np.random.random((1000, 1000))

In [30]: timeit a*a
100 loops, best of 3: 2.78 ms per loop

In [31]: timeit a**2
100 loops, best of 3: 2.77 ms per loop

In [32]: timeit np.power(a, 2)
10 loops, best of 3: 71.3 ms per loop
Run Code Online (Sandbox Code Playgroud)

  • `np.power`也计算出不同的结果. (2认同)
  • 如果`a = 0.46002700024131926`则`np.power(a,2)`→0.21162484095102674但是'a*a`→0.21162484095102677. (2认同)
  • 当然,这对于`np.allclose`(其中`atol`默认为1e-08)足够接近,但有时你想要一个尽可能精确的结果(给定浮点的约束). (2认同)
  • np.square(x) 似乎比 x**2 更快 (2认同)