べき乗のやり方と使い分け【Python】

pythonのべき乗の記事のアイキャッチPython

べき乗というのは\(x^n\)と表さられるものでしたね

Pythonでのべき乗にはいくつかのやり方が存在しますが、今回はこの3つを紹介します

  • 演算子
  • pow
  • numpy.power

演算子

べき乗の演算子は**です

演算子を使う方法が一番わかりやすくて、スッキリすると思います
なので特別な理由がなければこの方法で問題ないでしょう

**
print(2**3)
#8
print(5*2)
#25
print(2**-1)
#0.5
print(3**-2)
#0.1111111111111111

少数のべき乗もできます

print(0.5 ** 3)
# 0.125
print(-1.5 ** -1 )
# -0.6666666666666666
print(0.5 ** 0.5)
# 0.7071067811865476
print(-1.5 ** 2) # -1.5のマイナスより**の方が評価が早いため注意
# -2.25 = -(1.5)^2

pow

Pythonにはべき乗を計算してくれるpow()が組み込み関数として用意されています

べき乗演算子とは違い関数なので、高階関数にべき乗の関数を渡したい場合はこのpowを使うと良いでしょう

pow(底, 指数)
print(pow(2, 3))
# 8
print(pow(5, 2))
# 25
print(pow(2, -1))
# 0.5
print(pow(3, -2))
# 0.1111111111111111
print(pow(0.5, 3))
# 0.125
print(pow(-1.5, -1))
# -0.6666666666666666
print(pow(0.5, 0.5))
# 0.7071067811865476
print(pow(-1.5, 2))
# 2.25

numpy.power

numpyに対してべき乗をしたい時はnumpy.powerが使えます

ただ、べき乗指数部にマイナスは使えないので注意しましょう

import numpy as np

print(np.power(2, 3))
# 8
print(np.power(5, 2))
# 25
print(np.power(2, -1))
# ValueError: Integers to negative integer powers are not allowed.

numpy配列に対してまとめてべき乗を計算することもで可能です
指数をスカラーにすると、そのスカラーで全ての要素に対してべき乗してくれます

import numpy as np

x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
ans = np.power(x, 2)

print(ans)
# [  1   4   9  16  25  36  49  64  81 100]
print(type(ans))
# <class 'numpy.ndarray'>

底のnumpy配列と同じ形のnumpy配列を指数に与えることで、個別に指数を用意してべき乗することもできます

import numpy as np

x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
ans = np.power(x, x)

print(ans)
# [1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489, 10000000000]
print(type(ans))
# <class 'numpy.ndarray'>

numpy.powerでべき乗する方法を見てきましたが、numpyはブロードキャストされるので、べき乗演算子を使っても計算することは可能です

import numpy as np

x = np.asarray([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
ans = x ** 2

print(ans)
# [  1   4   9  16  25  36  49  64  81 100]
print(type(ans))
# <class 'numpy.ndarray'>

複素数へのべき乗

べき乗演算子は複素数に対しても使用可能で、

\((3+4j)^2=9+2\times3\times4j-16=-7+24j\)

と正しく計算されていることがわかります

y = 3 + 4j
print(y ** 2)
# (-7+24j)

コメント