このブログではデータサイエンスに関わる情報を発信しています。
今回はnumpyの使い方最終回という事で、何かと使う便利な関数を紹介します。
全てサンプルコードを記載してあります。各々のpythonの環境で実際に手を動かしながら読み進めていってください。
サクッとやりたい方は、google colaboratoryが簡単でおすすめです。
ではさっそく見ていきましょう~!
np.arange()とは?
np.arange()は特に配列を生成する上で便利な関数の一つです。
この関数は、与えられた開始点、終了点、ステップ間隔から、一次元の配列を生成することができます。
np.arange()の使い方
np.arange()関数の使い方は、以下の通りです。
- np.arange([start, ]stop, [step, ], dtype=None)
引数の内容は↓になっています。
- start:配列の開始点。デフォルトは0です。
- stop:配列の終了点。必ず指定する必要があります。
- step:隣り合う要素の間の間隔を指定する。デフォルトは1です。
- dtype:生成される配列のデータ型を指定します。
例えば、0から9までの整数値を持つ配列を生成するには、以下のようにします。
1 2 3 |
import numpy as np arr = np.arange(10) print(arr) |
->[0 1 2 3 4 5 6 7 8 9]
このコードでは、0から始まり、9までの要素を持つ配列が生成されます。
また、1から11まで2ずつ増加する配列を生成するには、以下のようにします。
1 2 |
arr = np.arange(1, 11, 2) print(arr) |
->[1 3 5 7 9]
np.arange()関数は、数値の配列を簡単に生成することができるため、データ分析や科学計算において非常に便利な関数の一つです。
np.linspace()とは?
np.linspace()も配列を生成する関数の一つです。
指定の配列が作れる点ではarange()と似ていますが、若干の違いがあります。
それは、指定された分割数で等分割する事です。
arange()ではステップで指定していましたね。
でもlinspace()では、例えば、1から11までを5等分したいって時に使います。
np.linspace()の使い方
np.linspace()関数の使い方は、以下の通りです。
- np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
引数の内容は↓になっています。
start
: 区間の始まりの値stop
: 区間の終わりの値num
: 区間の分割数(デフォルトは50)endpoint
: 区間の終点を含めるかどうか(デフォルトはTrue)retstep
: 間隔を返すかどうか(デフォルトはFalse)dtype
: 配列のデータ型(デフォルトはNone
)
例えば、0から1までの区間を10等分する場合は以下のように記述します。
1 2 |
arr = np.linspace(0, 1, 10) print(arr) |
->[0. 0.11111111 0.22222222 0.33333333 0.44444444 0.55555556 0.66666667 0.77777778 0.88888889 1. ]
また、endpoint=False
とすることで、終点を含まないように指定することもできます。
1 2 |
arr = np.linspace(0, 1, 10, endpoint=False) print(arr) |
->[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
retstep=True
とすると、等分割された間隔も返されます。
1 2 |
arr = np.linspace(0, 1, 10, retstep=True) print(arr) |
->(array([0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444, 0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ]), 0.1111111111111111)
このように、np.linspace()
関数を使うことで、簡単に等間隔の配列を作成することができます。
np.sum()とは?

np.sum()は、NumPy配列の要素の合計を計算します。
execelのsumと一緒ですね!
ただ引数を指定する事で、細かい設定をする事ができます。
np.sum()の使い方
np.sum()関数の使い方は、以下の通りです。
- numpy.sum(a, axis=None, dtype=None, keepdims=<no value>)
引数の内容は↓になっています。
- a: 配列(array)
- axis: 指定した軸に沿って合計する。デフォルトは全体を対象とする
- dtype: 出力のデータタイプ
- keepdims: 出力の次元数を入力配列と同じに保持する(True)か、次元数を削減する(False)
aはNumPyの配列である必要があります。
また、データの型(dtype)や軸(axis)を指定することもできます。axisを指定しない場合、全体の合計が計算されます。
以下に、実際にnp.sum()を使用した例を示します。
単純に全体合計、axisを指定して列方向、行方向に合計するやり方です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
arr = np.array([[1, 2, 3], [4, 5, 6]]) # 全体の合計を計算する total_sum = np.sum(arr) print(total_sum) # 出力: 21 # axis=0を指定して列方向に合計する col_sum = np.sum(arr, axis=0) print(col_sum) # 出力: [5 7 9] # axis=1を指定して行方向に合計する row_sum = np.sum(arr, axis=1) print(row_sum) # 出力: [ 6 15] |
->
21
[5 7 9]
[ 6 15]
np.isnan()とは?
np.isna()は指定された配列内の要素が欠損値である場合にTrue
を返し、それ以外の場合はFalse
を返します。欠損値NaN(Not a Number)の場所を特定するために使用されます。
NaNは、数値が存在しないことを表す特殊な値です。NULLとは若干意味合いが変わりますので注意してください。
np.isnan()の使い方
では使い方を見ていきましょう!
まずはNaNのあるサンプルデータを作ります。
NaNを生成するにはnp.nanを使って↓のようにします。
1 2 3 |
# 配列の作成(NaNを含む) arr = np.array([1, 2, np.nan, 4, 5, np.nan]) print(arr) |
->[ 1. 2. nan 4. 5. nan]
NaNのあるサンプルデータができました。
実際にisnan()を使ってみましょう。
1 2 3 4 5 |
# np.isnan()による欠損値チェック mask = np.isnan(arr) # 結果の出力 print(mask) |
->[False False True False False True]
この結果から、元の配列arr
には、2つの欠損値が含まれていることがわかります。
np.isnan()
関数により、欠損値である要素の位置がTrue
に置き換えられた真偽値配列がmask
に格納されます。
np.expand_dims()とは?
np.expand_dims()は、numpy配列の次元を拡張するために使用されます。
既存の配列の形状を保ちながら新しい軸を追加することができるのです。
np.expand_dims()の使い方
指定する引数はそこまで多くありません。
- np.expand_dims(array, axis)
引数の内容は↓になっています。
- array : 操作する配列
- axis : 拡張する次元を指定する。axis=0は最も外側の次元を表す。
では実際に例を見てみましょう!
まず、1次元配列を用意します。
1 |
a = np.array([1, 2, 3]) |
この1次元配列に対して、axis=0
を指定して、新たに1つの次元を追加します。
1 2 3 4 5 6 |
# 次元を追加 b = np.expand_dims(a, axis=0) print(b) # .shapeで形を確認 print(b.shape) |
->
[[1 2 3]]
(1, 3)
shapeの出力結果は(1, 3)
になります。これは、追加された新たな次元が行方向にある3列の2次元配列であることを示しています。
同様に、axis=1
を指定して、新たに1つの次元を追加します。
1 2 3 |
c = np.expand_dims(a, axis=1) print(c) print(c.shape) |
->
[[1]
[2]
[3]]
(3, 1)
出力結果は(3, 1)
になります。これは、追加された新たな次元が列方向にある3行の2次元配列であることを示しています。
np.squeeze()とは?

np.squeeze()
関数は、配列の次元を削減するために使用されます。
この関数を使うと、サイズが1の次元を取り除くことができます。
np.expand_dims()と全く逆の事を行います!
np.squeeze()の使い方
- numpy.squeeze(array, axis=None)
- array : 操作する配列
- axis :取り除く次元のインデックスを指定。axisにNoneを渡すと、次元数が1のすべての要素が除去される。数値で取り除く軸を指定する事も出来る。
では実際に使い方の例を見てみましょう!
まずは3次元の配列を作成します。
1 2 3 4 |
# 長さが1の次元が含まれる3次元の配列を作成 a = np.array([[[0], [1], [2]]]) print(a) print(a.shape) |
->
[[[0]
[1]
[2]]]
(1, 3, 1)
これに、squeeze()を使ってみましょう。
1 2 3 4 |
# 長さが1の次元を取り除いた結果を表示 b = np.squeeze(a) print(b) print(b.shape) |
->
[0 1 2]
(3,)
では続いて、axis=0
と指定して、1次元目の軸を削除してみましょう。
1 2 3 4 |
# axisで0を指定 c = np.squeeze(a, axis=0) print(c) print(c.shape) |
->
[[0]
[1]
[2]]
(3, 1)
flatten()とは?
flatten()
関数は、NumPy配列を一次元の配列に変換するための関数です。
つまり、多次元配列を一次元の配列に変換したい場合に使用します。
flatten()の使い方
flatten()
関数は、NumPy配列のメソッドとして利用できます。
以下は、配列を一次元配列に変換する例です。
1 2 3 4 5 6 7 |
# 2次元配列 arr = np.array([[1, 2], [3, 4]]) # 配列を一次元配列に変換 arr_flattened = arr.flatten() print(arr_flattened) # [1 2 3 4] |
->[1 2 3 4]
このように、複数次元の配列を1次元配列に変換する事ができます。
flatten()の注意点
flatten()
関数には、配列のコピーを作成するという重い処理が必要になるため、大規模な配列の場合には注意が必要です。
処理に思った以上に時間が掛かってしまうこともあります。
また、実際に使うシーンとしては、下記の様なシーンで使います。
- 全要素の平均を求める、全要素を正規化するなどの場合
- 画像処理で1次元配列に変換する必要がある時に使う
- 多次元配列に含まれるすべての要素を1次元配列に並べ替えた後、特定の要素数に削減する場合
データサイエンスの実務ではそこまで使う事はありませんが、こういう事も出来ると覚えておきましょう。
まとめ
今回も多くの関数を学びましたね!
一度に全部を覚えるのは難しいです。
どんな事ができるのか?その理解だけで十分だと思います。
実務で使う際に、使い方を検索したり、ドッグストリングスを確認したりして使えれば大丈夫です。
まずは挙動を理解する事を意識しましょう!
続いてpandasを学びたいという人は下記の記事をどうぞ!

Work illustrations by Storyset