こんにちは、ぼりたそです!
今回はPythonの数値計算ライブラリであるNumPyを使って配列を作成する方法について解説します。
NumPyでは、リストから配列を作成するだけでなく、連続した数値を並べたり、指定した値で埋めた配列を作成したりできます。
これらの操作は、データ分析や機械学習でデータを扱う際の基本となりますので、ぜひ覚えておきおきたいですね。
この記事では、以下のポイントを解説します。
- np.array():リストから配列を作成する
- np.arange():一定間隔の配列を作成する
- np.linspace():指定した要素数の配列を作成する
- np.zeros()、np.ones():0や1で埋めた配列を作成する
- np.full():指定した値で埋めた配列を作成する
それでは順番に確認していきましょう!
NumPyの配列とは?
NumPyは、Pythonで数値計算を効率的に行うためのライブラリです。
NumPyで扱う基本的なデータ構造はndarray(多次元配列)と呼ばれ、複数の数値をまとめて保持・計算できます。
例えば、Pythonのリストでは各要素を2倍するために繰り返し処理を使用することがありますが、NumPyでは配列全体に数値を掛けるだけで、各要素をまとめて計算できます。
NumPyを使用するには、最初にライブラリを読み込みます。
import numpy as np以降のコードは、この読み込みを実行した状態を前提とします。
np.array():リストから配列を作成する

NumPyで配列を作成する最も基本的な方法が、np.array()です。
Pythonのリストを引数に渡すことで、その内容を持つNumPy配列を作成できます。
import numpy as np
values = np.array([10, 20, 30, 40])
print(values)
# 実行結果:
# [10 20 30 40]NumPyの配列は、リストとは異なり、表示した際に要素間のカンマがありません。
2次元配列を作成する

NumPyでは、1次元配列だけでなく、行と列を持つ2次元配列も作成できます。
例えば、次のコードでは2行3列の配列を作成しています。
values = np.array([
[10, 20, 30],
[40, 50, 60]
])
print(values)
print(values.shape)
# 実行結果:
# [[10 20 30]
# [40 50 60]]
# (2, 3)shapeは配列の形状を表す属性です。
実行結果の(2, 3)は、2行3列の配列であることを意味しています。
データ分析や機械学習では、行をサンプル、列を特徴量として2次元配列を扱うことが多いため、配列の形状を確認する操作は重要です。
np.arange():一定間隔の配列を作成する

np.arange()は、指定した範囲の数値を一定間隔で並べた配列を作成する関数です。
基本的な書き方は次のとおりです。
np.arange(開始値, 終了値, 刻み幅)例えば、0から10までの数値を2ずつ増やした配列を作成してみましょう。
values = np.arange(0, 11, 2)
print(values)
# 実行結果:
# [ 0 2 4 6 8 10]ここで注意したいのは、終了値は配列に含まれないという点です。
今回の例では、10までの値を含めるために終了値を11と指定しています。
また、刻み幅を省略した場合は1となり、開始値を省略した場合は0から配列が作成されます。
print(np.arange(5))
print(np.arange(2, 6))
# 実行結果:
# [0 1 2 3 4]
# [2 3 4 5]このように、np.arange()は連続した数値や一定間隔の数値を作成したい場合に便利です。
np.linspace():指定した要素数の配列を作成する

np.linspace()は、開始値と終了値の間を等間隔に分割して、指定した個数の値を持つ配列を作成する関数です。
基本的な書き方は次のとおりです。
np.linspace(開始値, 終了値, num=要素数)例えば、0から1までの間に5つの数値を等間隔で並べてみましょう。
values = np.linspace(0, 1, num=5)
print(values)
# 実行結果:
# [0. 0.25 0.5 0.75 1. ]np.linspace()では、標準の設定で開始値と終了値の両方が含まれます。
今回の例では、0から1までの範囲を4つの区間に分割し、両端を含む5つの値を作成しています。
arangeとlinspaceの違い
np.arange()とnp.linspace()は、どちらも規則的な数値の配列を作成しますが、指定する内容が異なります。
| 関数 | 指定する内容 | 終了値 |
|---|---|---|
| np.arange() | 刻み幅 | 含まない |
| np.linspace() | 要素数 | 標準で含む |
例えば、0から10までの数値を5つの区間に分割したい場合は、次のように記述できます。
a = np.arange(0, 11, 2)
b = np.linspace(0, 10, num=6)
print(a)
print(b)
# 実行結果:
# [ 0 2 4 6 8 10]
# [ 0. 2. 4. 6. 8. 10.]どちらも0から10までの6個の値が得られますが、np.linspace()では浮動小数点数として配列が作成されています。
また、小数を刻み幅に指定する場合、浮動小数点数の丸め誤差によってnp.arange()の結果が意図と異なることがあります。
必要な刻み幅が決まっている場合はnp.arange()、必要な要素数が決まっている場合はnp.linspace()を使うとよいでしょう。
np.zeros()・np.ones():0や1で埋めた配列を作成する

次に、すべての要素が0または1となる配列を作成してみましょう。
np.zeros()は0、np.ones()は1で埋めた配列を作成する関数です。
例えば、要素数が4の1次元配列は次のように作成できます。
zeros = np.zeros(4)
ones = np.ones(4)
print(zeros)
print(ones)
# 実行結果:
# [0. 0. 0. 0.]
# [1. 1. 1. 1.]また、2次元配列を作成する場合は、行数と列数をタプルで指定します。
values = np.zeros((2, 3))
print(values)
# 実行結果:
# [[0. 0. 0.]
# [0. 0. 0.]](2, 3)と指定することで、2行3列の配列が作成されています。
なお、np.zeros()とnp.ones()では、データ型を指定しなければ標準でfloat64となります。
整数型の配列を作成したい場合は、次のようにdtypeを指定します。
values = np.zeros((2, 3), dtype=np.int64)
print(values)
print(values.dtype)
# 実行結果:
# [[0 0 0]
# [0 0 0]]
# int64dtypeは配列の各要素が持つデータ型を指定する引数です。
np.full():指定した値で埋めた配列を作成する

最後に紹介するのがnp.full()です。
np.full()は、指定した形状の配列を、任意の値で埋めて作成する関数です。
np.full(形状, 値)例えば、すべての要素が5となる2行3列の配列を作成してみましょう。
values = np.full((2, 3), 5)
print(values)
# 実行結果:
# [[5 5 5]
# [5 5 5]]また、小数を指定することもできます。
values = np.full((2, 3), 2.5)
print(values)
# 実行結果:
# [[2.5 2.5 2.5]
# [2.5 2.5 2.5]]このような操作は、データの初期値を設定するときなどに便利です。
さらに、既存の配列と同じ形状で新しい配列を作成することもできます。
scores = np.array([
[70, 80, 90],
[60, 75, 85]
])
initial = np.zeros(scores.shape)
print(initial)
# 実行結果:
# [[0. 0. 0.]
# [0. 0. 0.]]scores.shapeには(2, 3)が格納されているため、元の配列と同じ形状の配列が作成されます。
ただし、shapeを指定しただけでは元の配列のデータ型が引き継がれるわけではないので注意してください。
NumPyを基礎から学びたい方へ
今回はNumPyの配列を作成するための基本的な関数を紹介しました。
ただし、NumPyをデータ分析や機械学習で活用するためには、配列の作成だけでなく、データの取り出しや形状の変更、数値計算なども理解しておく必要があります。
そこで、NumPyの基本操作を体系的に学びたい方向けに、Kindle書籍『機械学習・データ分析のためのNumPy入門 ― 配列操作と数値計算の基本をPythonで学ぶ ―』を執筆しました。
本書では、今回紹介した配列の作成方法から、インデックス・スライス、条件抽出、集計、ブロードキャスト、データ分析に役立つ操作まで、コード例と演習問題を通じて学べる構成にしています。
「NumPyを使えるようになりたい」「Pythonによるデータ分析や機械学習の基礎を身につけたい」という方は、ぜひチェックしてみてください!
まとめ
今回は、NumPyで配列を作成する方法について解説しました。
今回紹介した関数をまとめると、次のようになります。
| 関数 | 用途 |
|---|---|
| np.array() | リストなどから配列を作成 |
| np.arange() | 刻み幅を指定して配列を作成 |
| np.linspace() | 要素数を指定して等間隔の配列を作成 |
| np.zeros() | すべて0の配列を作成 |
| np.ones() | すべて1の配列を作成 |
| np.full() | 指定した値で埋めた配列を作成 |
NumPyでは、配列の形状やデータ型を適切に指定することが、意図した計算結果を得るための重要なポイントとなります。
まずは今回紹介した関数を実際に動かして、作成される配列の違いを確認してみてください!
