1. ホーム
  2. python

[解決済み] 2次元のnumpy配列を2乗または1乗(要素ごとに)する方法は?

2022-03-02 14:52:22

質問

私は2Dのnumpy配列を(要素ごとに)平方する必要があり、私は以下のコードを試してみました。

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 .

解決方法は?

最も速い方法は、次のようにします。 a*a または a**2 または np.square(a) 一方 np.power(a, 2) はかなり遅くなることがわかりました。

np.power() の代わりに、各要素に異なる指数を使用することができます。 2 を渡すと、別の指数配列が渡されます。GarethRees さんのコメントで、この関数の結果が a**2 または a*a これは、公差が小さい場合に重要になります。

NumPy 1.9.0 MKL 64 bit を使っていくつかの例の時間を計ってみたところ、以下のような結果になりました。

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