Python

Numpy配列の合計、最小値、最大値などを求める方法

By 2021年6月3日No Comments

この記事では、Numpy配列の合計、平均、四則演算などの操作を行う方法について説明します。データ処理における基本的な操作なので覚えておきましょう。

合計を求める方法

np.sum()を使うと要素の合計の値が返ってきます。例として2行3列の配列を準備します。

np.sum()関数内の引数に合計を求めたい配列のみを渡すとすべての要素の合計値が返ってきます。

import numpy as np

a = np.arange(6).reshape(2, 3)
print(a)
# [[0 1 2]
#  [3 4 5]]

all_sum = np.sum(a)  # すべての要素の合計
print(all_sum)
# 15

列ごとに合計を出したいときは引数axis=0を渡します。同様にaxis=1とすると行ごとの合計値を得ることができます。

column_sum = np.sum(a, axis=0)  # 列ごとの合計
print(column_sum)
# [3 5 7]
row_sum = np.sum(a, axis=1)  # 行ごとの合計
print(row_sum)
# [3 12]

最小値、最大値を求める

最小値はnp.min()、最大値はnp.max()で求めることができます。合計のときと同じようにaxisを設定しないとすべての要素における最小値、最大値が返ってきます。

min = np.min(a)  # すべての要素における最小値
print(min)
# 0
max = np.max(a)  # すべての要素における最大値
print(max)
# 5

axis=0を渡すと列ごと、axis=1を渡すと行ごとの最小値、最大値が返ってきます。

culumn_min = np.min(a, axis=0)  # 列ごとの最小値
print(culumn_min)
# [0 1 2]
row_max = np.max(a, axis=1)  # 行ごとの最大値
print(row_max)
#[2 5]

平均値、標準偏差、分散を求める方法

平均値はnp.mean()で求められる。axisを指定すると、列ごと・行ごとの結果を得られる。

mean = np.mean(a)
print(mean)  # すべての要素の平均
# 2.5

culumn_mean = np.mean(a, axis=0)  # 列ごとの要素の平均
print(culumn_mean)
# [1.5 2.5 3.5]

row_mean = np.mean(a, axis=1)  # 行ごとの要素の平均
print(row_mean)
# [1. 4.]

標準偏差は、データの平均との差を2乗した値の平均に対して平方根を取ることで求められる指標で、データの散らばり具合を示します。標準偏差はnp.std()で求めることができます。

std = np.std(a)
print(std)
# 1.707825127659933
row_std = np.std(a, axis=1)
print(row_std)
# [0.81649658 0.81649658]平均との偏差を2乗平均した分散についてはnp.var()で求めることができます。
var = np.var(a)
print(var)
# 2.9166666666666665
culumn_var = np.var(a, axis=0)
print(culumn_var)
# [2.25 2.25 2.25]

スライスを用いた部分的な配列に対する操作

スライスで指定した部分的な配列に対する合計や最小値などを算出することもできます。

import numpy as np

b = np.arange(12).reshape(3, 4)
print(b)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

print(np.sum(b[0:2, :]))  # 0~1行のすべての要素の合計
# 28

print(np.sum(b[:, 0:3]))  # 0~2列のすべての要素の合計
# 45

print(np.max(b[0:2, 0:3]))  # 0~1行、0~2列の要素の中での最大値
# 6

print(np.min(b[2, :]))  # 2行目の最小値
# 8

print(np.mean(b[:, 3]))  # 3列目の平均値
# 7

四則演算

一つの配列に対して四則演算すると、すべての要素に対して演算が実行されます。

print(a)
# [[0 1 2]
#  [3 4 5]]

print(a + 1)
# [[1 2 3]#  [4 5 6]]引き算、掛け算、割り算も同様に行うことができます。
print(a - 1)
# [[-1  0  1]#  [ 2  3  4]]
print(a * 2)
# [[ 0  2  4]#  [ 6  8 10]]
print(a / 2)
# [[0.  0.5 1. ]#  [1.5 2.  2.5]]

配列同士の四則演算では、対応する要素ごとに計算されます。

array_1 = np.array([[1, 2], [3, 4]])
print(array_1)
# [[1 2]
#  [3 4]]

array_2 = np.array([[5, 6], [7, 8]])
print(array_2)
# [[5 6]
#  [7 8]]

array = array_1 + array_2  # 要素ごとに和をとります
print(array)
# [[ 6  8]
#  [10 12]]

掛け算、割り算も同様に計算されます。

array = array_1 * array_2  # 要素ごとに積をとります
print(array)
# [[ 5 12]
#  [21 32]]

array = array_1 / array_2  # 要素ごとに商をとります。
print(array)
# [[0.2        0.33333333]
#  [0.42857143 0.5       ]]

また、行列の内積を計算するときはnp.dot()、もしくは演算子@を使います。

array = np.dot(array_1, array_2)
print(array)
# [[19 22]
#  [43 50]]

array = array_1 @ array_2
print(array)
# [[19 22]
#  [43 50]]

行と列の数が異なる場合でも、足りない行と列の値を自動的に補う機能があります。この機能をブロードキャストといいます。演算を行う配列の行数か列数の少なくともどちらか一方が同じであればブロードキャストされます。

array_3 = np.arange(6).reshape(2, 3)  # 2行3列
print(array_3)
# [[0 1 2]
#  [3 4 5]]
array_4 = np.array([[10], [20]])  # 2行1列
print(array_4)
# [[10]
#  [20]]
array = array_3 + array_4  # array_4 = [[10 10 10], [20 20 20]]にブロードキャストされます。
print(array)
# [[10 11 12]
#  [23 24 25]]

array_3 = array_3.reshape(3, 2)  # 3行2列
print(array_3)
# [[0 1]
#  [2 3]
#  [4 5]]
array_4 = array_4.reshape(1, 2)  # 1行2列
print(array_4)
# [[10 20]]
array = array_3 + array_4
print(array)
# [[10 21]
#  [12 23]
#  [14 25]]

まとめ

今回はNumpy配列の合計や最小値、最大値などを求める方法について解説しました。

スライスやブロードキャストを用いた処理方法についても解説しているのでぜひ参考にしてください。

Udemyの動画学習でもPythonを勉強しよう!

「平日の夜の勉強会には時間が間に合わなくて参加できない」「通勤時間のわずかな隙間時間を勉強時間にあてたい」「本ではよく分からないところを動画で理解を深めたい」そんなあなたはUdemyの動画学習がお勧めです!

UdemyのPythonおすすめ33講座レビューリスト
HOSL

Author HOSL

More posts by HOSL