Python NumPy / ndarray のメソッド #13

株式会社リュディアです。今回も NumPy についてまとめていきます。

前回までの NumPy / ndarray のメソッドについてのまとめへのリンクは以下を参考にしてください。

以下のリンクの内容を元にまとめを作っていきます。

今回も Calculation のメソッドをまとめていきます。今回は trace(), prod(), cumprod() です。

最初は trace() です。一言で書くと配列の対角成分の和を返すメソッドです。以下のコードを見てください。

import numpy as np

x = np.array([9, 10, 11, 12, 4, 2, 3, 1, 7, 6, 5, 8], np.int32)
y = x.reshape(3, 4)

print(y)

print(y.trace())
print(y.trace(1))
print(y.trace(2))
print(y.trace(3))

#
# [[ 9 10 11 12]
#  [ 4  2  3  1]
#  [ 7  6  5  8]]
#
# 16 <- 9 + 2 + 5
#
# 21 <- 10 + 3 + 8
#
# 12 <- 11 + 1
#
# 12
#

実行結果の部分に計算内容をコメントとして追記しています。diagonal() メソッドと同様に引数に 1, 2 を指定した場合はずれた対角成分の和を返します。次の絵を見てもらえばわかると思います。

画像1

また diagonal() を含むまとめへのリンクもつけておきます。

次は prod() です。sum() が和を計算したのと同様に prod() は積を計算します。以下のコードを見てください。

import numpy as np

x = np.array([9, 10, 11, 12, 4, 2, 3, 1, 7, 6, 5, 8], np.int32)
y = x.reshape(3, 4)

print(y)

print(y.prod())
print(y.prod(axis=0))
print(y.prod(axis=1))

#
# [[ 9 10 11 12]
#  [ 4  2  3  1]
#  [ 7  6  5  8]]
#
# 479001600
#
# [252 120 165  96]
#
# [11880    24  1680]
#

sum() と同様に引数無しの場合はすべての要素の積を計算します。引数 axis = 0 の場合は各列ごとの積を計算し、引数 axis = 1 の場合は各行ごとの積を計算します。

最後に cumprod() です。cumsum() が累積和を計算したのと同様に cumprod() は累積積を計算します。以下のコードを見てください。

import numpy as np

x = np.array([9, 10, 11, 12, 4, 2, 3, 1, 7, 6, 5, 8], np.int32)
y = x.reshape(3, 4)

print(y)

print(y.cumprod())
print(y.cumprod(axis=0))
print(y.cumprod(axis=1))

#
# [[ 9 10 11 12]
#  [ 4  2  3  1]
#  [ 7  6  5  8]]
#
# [ 9 90 990 1880 47520 95040 285120 285120 1995840 11975040 59875200 479001600]
#
# [[  9  10  11  12]
#  [ 36  20  33  12]
#  [252 120 165  96]]
#
# [[    9    90   990 11880]
#  [    4     8    24    24]
#  [    7    42   210  1680]]
#

cumsum() と同様に引数無しの場合はすべての要素に対して先頭要素から自分自身までの累積積を計算します。引数 axis = 0 の場合は各列ごとに先頭要素から自分自身までの累積積を計算し、引数 axis = 1 の場合は各行ごとに先頭要素から自分自身までの累積積を計算します。

では、ごきげんよう。


この記事が気に入ったらサポートをしてみませんか?