NumPyのndarrayによるプログラミングについて、今回は真偽値配列関数、ソート関数に絞って説明しよう。

特に配列のソートはプログラミングにおいて頻出する重要機能のため、完全にマスターしておきたいところだ。

真偽値配列関数

真偽値(True・False)に対して関数を適用することができる。

sum関数

例えば真偽値配列に対し、sum関数を適用すると以下のような結果が得られる。

import numpy as np

arr = np.random.randn(100)

(arr > 0)
# array([False,  True, False, False,  True,  True, False,  True, False,
#         True, False, False, False, False, False,  True,  True, False, ............

(arr > 0).sum() # 48

真偽値に関数を適用すると、Trueは1、Falseは0として扱われ、sum関数ではTrueの数をカウントした結果が得られるというわけだ。

any関数

any関数は、ndarrayのうち一つでもTrueが存在すればTrueを返す。

import numpy as np

arr = np.array([False, True, False, False])

arr.any() # True

all関数

all関数は、ndarrayの要素全てがTrueの時、Trueを返す。

import numpy as np

arr = np.array([True, True, True, True])

arr.all() # True

ndarrayのソート

Python標準のリストにもソート機能はあるが、ndarrayにもsort関数が用意されている。

なお、sort関数はソートした結果のコピーを返さず、元のndarrayを上書きする。

import numpy as np

arr = np.random.randn(5)
print(arr)
# [ 0.28203596  0.70142592  1.08386279  0.73619642 -0.21789111]

arr.sort()
print(arr)
# [-0.21789111  0.28203596  0.70142592  0.73619642  1.08386279]

多次元配列のソート

もちろん多次元配列をソートすることもできる。

多次元配列の場合は、sort関数の引数に軸を指定し、任意の軸に沿ったソート結果を得られることができる。

import numpy as np

arr = np.random.randn(4, 3)
print(arr)
# [[-0.77369579  0.00389253 -0.37738373]
#  [ 0.62122156  1.04506444 -1.60011817]
#  [-1.05225141  0.24721429 -1.26201976]
#  [-0.20017432  1.34587581 -0.6662419 ]]

arr.sort(1)
print(arr)
# [[-1.60011817 -1.05225141  0.00389253]
#  [-1.26201976 -0.77369579  0.24721429]
#  [-0.6662419  -0.20017432  1.04506444]
#  [-0.37738373  0.62122156  1.34587581]]

ソートした結果のコピーを得たい場合は、「np.sort()」を使う。
「np.ndarray()」と違う点に注意だ。

import numpy as np

arr1 = np.random.randn(5)
print(arr1)
# [ 0.01080367  0.73556961  0.92731355  1.35046635 -0.85196875]

arr2 = np.sort(arr)

print(arr1)
# [ 0.01080367  0.73556961  0.92731355  1.35046635 -0.85196875]

print(arr2)
# [-0.60228592 -0.60076974 -0.22015877  1.06724723  1.6829256 ]