2D numpy 配列を要素ごとに二乗または累乗するにはどうすればよいでしょうか? 質問する

2D numpy 配列を要素ごとに二乗または累乗するにはどうすればよいでしょうか? 質問する

2D numpy 配列を (要素ごとに) 2 乗する必要があり、次のコードを試しました。

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

その結果は次のようになります。

[[2 3]
[0 1]]

[[0 1]
[4 9]]

明らかに、この表記法ではa*a私が望む結果が得られますが、 ではありませんa^2

NumPy 配列を 2 乗または N 乗する別の表記法が存在するかどうかを知りたいです。 の代わりにa*a*a*..*a

ベストアンサー1

最も速い方法は、またはを実行することです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

おすすめ記事