レッスン3 / 5問目

『最大・最小 - ufunc』

このレッスンではndarrayの最大・最小を求めるユニバーサル関数について学習していきましょう。最大、最小を求めるユニバーサル関数は以下の通りです。

ufunc説明
np.maximum最大
np.minimum最小
np.fmax最大(nanを除外)
np.fmin最小(nanを除外)

上記4つのufuncとnanについて以下の順番で見ていきます。

  1. maximu, minimum
  2. nanとは
  3. fmax, fmin

では順番に見ていきましょう。

maximum, minimum

以下の例ではnp.maximum()を用いてarr1とarr2の配列要素ごとの最大値をもつ配列を生成しています。

  1. arr1 = np.array([1, 2, 3, 4, 5])
  2. arr2 = np.array([5, 4, 3, 2, 1])
  3. arr3 = np.maximum(arr1, arr2)
  4. print(arr3)
[5 4 3 4 5]    # 最大値の配列

np.minimumに関しても扱い方は同じです。np.minimum()の引数に配列を渡すことでそれぞれの配列要素の最小値を持つ配列を返します。

nanとは

nanとは Not a number の省略形であり非数のことを指します。

例えばデータ分析を行う際に「データが抜けている個所」などがnanにあたります。
以下はpandasというライブラリでcsvファイル(カンマ区切りデータ)を読み込んだものですが、 以下のデータでは赤枠部分の「来店者数」にはデータが存在しないためnanと表記されています。

上記のNaNはデータが存在しないことを表しています。
そして上記NaNのような一連のデータの中で値が抜け落ちている個所を欠損値と呼びます。

maximum, minimumではnanが選択される。

np.maximumやnp.minimumでは配列に上記のような欠損値NaNが含まれている場合にはNaNを返します。
以下の例では配列arr1にnanが含まれているためnp.maximum()はnanがある個所ではnanを選択しています。(下記np.nanは欠損値nanを表します。)

  1. arr1 = np.array([np.nan, 2, 3, 4, np.nan])
  2. arr2 = np.array([5, 4, 3, 2, 1])
  3. arr3 = np.maximum(arr1, arr2)
  4. print(arr3)
[nan 4. 3. 4. nan]    # nanがある場合はnanが選択される。

np.minimumの場合も同様にnanがある場合はnanが選択されます。

fmax, fmin

np.fmaxとnp.fminを用いると上記のような欠損値nanを選択せずに最大値と最小値を返すことができます。以下の例では欠損値を含む配列に対してnp.fmaxを用いて最大値の配列を返しています。

  1. arr1 = np.array([np.nan, 2, 3, 4, np.nan])
  2. arr2 = np.array([5, 4, 3, 2, 1])
  3. arr3 = np.fmax(arr1, arr2)
  4. print(arr3)
[5. 4. 3. 4. 1.]    # nanは選択されない。

今回はfmaxを用いているため欠損値は選択されませんでした。

まとめ

このレッスンでは最大値と最小値を求めるユニバーサル関数について学習しました。ここで学習した関数は以下の4つでした

ufunc説明
np.maximum最大
np.minimum最小
np.fmax最大(nanを除外)
np.fmin最小(nanを除外)

これらの使い分けとしては、maximumとminimumはnanを含ませる場合に使用します。一方fmaxとfminはnanを含ませたくない場合に使用します。

ではレッスンは以上となります。演習課題にチャレンジしましょう。

Lesson1

arr1とarr2の最小値をもつ配列を出力してください。(nanを含める)

Lesson2

arr1とarr2の最小値をもつ配列を出力してください。(nanは含めない)

Last updated:2019/10/30

[nan  2.  3.  2. nan]
[5. 2. 3. 2. 1.]
  1. import numpy as np

  2. arr1 = np.array([np.nan, 2, 3, 4, np.nan])
  3. arr2 = np.array([5, 4, 3, 2, 1])

  4. # 1.arr1とarr2の最小値をもつ配列を出力してください。(nanを含める)

  5. arr3 = np.minimum(arr1, arr2)
  6. print(arr3)

  7. # 2. arr1とarr2の最小値をもつ配列を出力してください。(nanは含めない)

  8. arr4 = np.fmin(arr1, arr2)
  9. print(arr4)
main.py
設定
g
n
i
d
a
o
L