どうもニコイチです。前回はNumPyの配列について記事を書きました。Pythonはデータ分析や機械学習、さらにはWeb開発やゲーム開発といった幅広い分野で使用されています。その中でも特にデータ処理や計算において非常に重要なのが「配列」の操作です。配列はデータを効率的に管理し、処理するための基礎的なデータ構造であり、これを正しく理解して活用することが、Pythonでのプログラミングスキル向上に大きく貢献します。配列とリストについて不明点があるかたはぜひ前回の記事を御覧ください。

そこで、Pythonの数値計算ライブラリである NumPy(ナンパイ) を使った配列の生成方法について、本記事では詳しく解説していきます。NumPyは大量のデータを効率的に扱うことができるツールであり、配列生成や計算において高い性能を発揮します。
今回は、以下の内容について学びます
- 一定間隔の値を持つ配列の生成方法
- 特定の値だけを持つ配列の生成方法
- 単位行列など、特殊な形状の配列生成方法
Python初学者の方でも分かりやすいように、例を挙げながら丁寧に解説していきますので、ぜひ最後までお付き合いください。
基本の配列生成方法
Pythonで配列を生成するには、特に便利なライブラリである NumPy を利用します。この章では、配列生成の基本となる numpy.arange()
と numpy.linspace()
の使い方を詳しく解説します。それぞれの関数には独自の特徴があり、用途によって使い分けることができます。
numpy.arange() を使った一定間隔の配列生成
numpy.arange()
は、指定した範囲内で一定間隔の値を持つ配列を生成する関数です。
構文:
numpy.arange(開始値, 終了値, 間隔値)
引数:
- 開始値: 配列の最初の値(デフォルトは0)。
- 終了値: 配列の範囲を定義する終了値(この値は配列に含まれません)。
- 間隔値: 配列の値同士の間隔(デフォルトは1)。
使用例 1: 最も基本的な使い方
import numpy as np
# 0から9までの範囲で1ずつ増加する配列を生成
arr = np.arange(10)
print(arr)
出力:
[0 1 2 3 4 5 6 7 8 9]
使用例 2: 開始値と終了値を指定
import numpy as np
# 5から15までの範囲で1ずつ増加する配列を生成
arr = np.arange(5, 15)
print(arr)
出力:
[ 5 6 7 8 9 10 11 12 13 14]
使用例 3: 開始値、終了値、間隔値を指定
import numpy as np
# 1から10までの範囲で2ずつ増加する配列を生成
arr = np.arange(1, 10, 2)
print(arr)
出力:
[1 3 5 7 9]
注意点:
- 終了値は範囲に含まれません。
- 小数を間隔値に指定することも可能です。例:
arr = np.arange(0, 1, 0.2) print(arr)
出力:[0. 0.2 0.4 0.6 0.8]
numpy.linspace() を使った等間隔の配列生成
numpy.linspace()
は、指定した開始値と終了値の間を均等に分割した値を持つ配列を生成する関数です。
構文:
numpy.linspace(開始値, 終了値, 要素数)
引数:
- 開始値: 配列の最初の値。
- 終了値: 配列の最後の値(この値は配列に含まれます)。
- 要素数: 配列の中に含まれる値の数(デフォルトは50個)。
使用例 1: デフォルトの要素数(50個)
import numpy as np
# -10から10までの範囲を等間隔で50個に分割した配列を生成
arr = np.linspace(-10, 10)
print(arr)
出力(抜粋):
[-10. -9.59183673 -9.18367347 ... 9.18367347 9.59183673 10.]
使用例 2: 要素数を指定
import numpy as np
# 0から1までの範囲を等間隔で5個に分割した配列を生成
arr = np.linspace(0, 1, 5)
print(arr)
出力:
[0. 0.25 0.5 0.75 1. ]
注意点:
- 終了値は配列に含まれます(
arange()
との違い)。 - 必ず浮動小数点型(小数点付きの値)の配列が生成されます。
arange() と linspace() の違い
特徴 | numpy.arange() | numpy.linspace() |
---|---|---|
配列生成の方法 | 指定した「間隔値」で生成 | 指定した「要素数」で等間隔生成 |
終了値の扱い | 含まれない | 含まれる |
型 | 整数型または浮動小数点型 | 浮動小数点型 |
用途 | 明確な間隔での値の生成に便利 | 特定の範囲を均等に分割したい場合に便利 |
まとめ
arange()
は間隔値を基準に配列を生成し、終了値は含まれません。linspace()
は要素数を基準に配列を生成し、終了値が含まれます。- それぞれの関数を理解して、適切な場面で使い分けましょう。
特定の値で構成された配列の生成
前章では、一定間隔または等間隔で値を持つ配列を生成する方法を解説しました。ここでは、特定の値で構成された配列を生成する方法を詳しく見ていきます。NumPyでは、以下の関数を使用して簡単に配列を作成することができます。
numpy.zeros()
:すべての要素が 0 の配列を生成numpy.ones()
:すべての要素が 1 の配列を生成numpy.full()
:指定した値で構成された配列を生成
さらに、特殊な配列として、単位行列を生成するための numpy.eye()
も紹介します。
numpy.zeros() を使った 0 の配列生成
numpy.zeros()
は、指定した形状の配列を生成し、すべての要素を 0 に初期化します。
構文:
numpy.zeros(配列の形状)
引数:
- 配列の形状:生成したい配列のサイズを指定します(例:1次元配列なら長さ、2次元配列なら行数と列数)。
使用例 1: 1次元配列
import numpy as np
# 長さ5の1次元配列を生成
arr = np.zeros(5)
print(arr)
出力:
[0. 0. 0. 0. 0.]
使用例 2: 2次元配列
import numpy as np
# 3行4列の2次元配列を生成
arr = np.zeros((3, 4))
print(arr)
出力:
[[0. 0. 0. 0.]
[0. 0. 0. 0.]
[0. 0. 0. 0.]]
numpy.ones() を使った 1 の配列生成
numpy.ones()
は、指定した形状の配列を生成し、すべての要素を 1 に初期化します。
構文:
numpy.ones(配列の形状)
引数:
- 配列の形状:
zeros()
と同じく、生成したい配列のサイズを指定します。
使用例 1: 1次元配列
import numpy as np
# 長さ7の1次元配列を生成
arr = np.ones(7)
print(arr)
出力:
[1. 1. 1. 1. 1. 1. 1.]
使用例 2: 2次元配列
import numpy as np
# 2行3列の2次元配列を生成
arr = np.ones((2, 3))
print(arr)
出力:
[[1. 1. 1.]
[1. 1. 1.]]
numpy.full() を使った任意の値の配列生成
numpy.full()
は、指定した形状と値を持つ配列を生成します。0 や 1 だけでなく、任意の値で配列を埋める場合に使います。
構文:
numpy.full(配列の形状, 任意の数値)
引数:
- 配列の形状:生成する配列の形状を指定します。
- 任意の数値:配列内のすべての要素に設定する値を指定します。
使用例 1: 任意の値で構成された1次元配列
import numpy as np
# 長さ5の1次元配列を生成(すべての要素が3)
arr = np.full(5, 3)
print(arr)
出力:
[3 3 3 3 3]
使用例 2: 2次元配列
import numpy as np
# 2行2列の配列を生成(すべての要素が7)
arr = np.full((2, 2), 7)
print(arr)
出力:
[[7 7]
[7 7]]
numpy.eye() を使った単位行列の生成
単位行列とは、行列の左上から右下にかけての対角線の値が 1、それ以外はすべて 0 の正方行列を指します。この単位行列を生成するためには、numpy.eye()
を使用します。
構文:
numpy.eye(サイズ)
引数:
- サイズ:単位行列の行数(列数も同じになります)。
使用例 1: 3×3の単位行列
import numpy as np
# 3行3列の単位行列を生成
arr = np.eye(3)
print(arr)
出力:
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
使用例 2: 5×5の単位行列
import numpy as np
# 5行5列の単位行列を生成
arr = np.eye(5)
print(arr)
出力:
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
まとめ
numpy.zeros()
:すべての要素が 0 の配列を生成。numpy.ones()
:すべての要素が 1 の配列を生成。numpy.full()
:任意の値で構成された配列を生成。numpy.eye()
:対角線が 1 の単位行列を生成。
これらの関数を組み合わせることで、データ処理やシミュレーションなど、さまざまな場面で柔軟に配列を作成することができます。
単位行列の生成と応用例
前章で紹介した numpy.eye()
を使用すると、簡単に単位行列を作成できることを学びました。単位行列は、線形代数や数値計算において非常に重要な役割を果たします。この章では、単位行列を使った応用例を紹介し、さらに「生成した配列」を使った簡単な操作についても解説していきます。
単位行列の基礎知識
単位行列とは、以下のような特徴を持つ正方行列です:
- 左上から右下にかけての対角成分がすべて 1。
- それ以外の要素はすべて 0。
- 行列のサイズが n×nn \times n の場合、この行列を InI_n と表記します。
例: 3×3 の単位行列 I3I_3
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
応用例 1: 単位行列を使った行列の演算
例 1: 任意の行列との積 単位行列は行列の積において「元の行列を変えない」という性質を持っています。たとえば、行列 AA に対して以下が成り立ちます: A⋅I=AA \cdot I = A I⋅A=AI \cdot A = A
コード例
import numpy as np
# 任意の行列A
A = np.array([[2, 4], [6, 8]])
# 単位行列I
I = np.eye(2)
# 行列積を計算
result = np.dot(A, I)
print("A x I の結果:")
print(result)
出力:
A x I の結果:
[[2. 4.]
[6. 8.]]
応用例 2: 単位行列を用いた対角行列の作成
単位行列をスカラー(単一の数値)で掛け合わせることで、すべての対角成分がそのスカラー値に置き換わる「対角行列」を作成できます。
コード例
import numpy as np
# 単位行列I
I = np.eye(4)
# 単位行列に3を掛けて対角行列を生成
diagonal_matrix = I * 3
print("対角行列:")
print(diagonal_matrix)
出力:
対角行列:
[[3. 0. 0. 0.]
[0. 3. 0. 0.]
[0. 0. 3. 0.]
[0. 0. 0. 3.]]
応用例 3: 特定の対角成分を持つ行列の作成
numpy.eye()
を利用しつつ、さらに NumPy の配列操作機能を組み合わせることで、任意の対角成分を持つ行列を簡単に作成できます。
コード例
import numpy as np
# サイズ4の単位行列
I = np.eye(4)
# 対角成分を変更
custom_matrix = I * [1, 2, 3, 4]
print("特定の対角成分を持つ行列:")
print(custom_matrix)
出力:
特定の対角成分を持つ行列:
[[1. 0. 0. 0.]
[0. 2. 0. 0.]
[0. 0. 3. 0.]
[0. 0. 0. 4.]]
応用例 4: 単位行列と他の配列の組み合わせ
単位行列を他の関数と組み合わせることで、さまざまな形状の行列や配列を生成することが可能です。
例: 単位行列を基に、値が増加する対角行列を生成
import numpy as np
# サイズ5の単位行列
I = np.eye(5)
# 対角成分に値を設定
values = np.arange(1, 6)
diagonal_matrix = I * values
print("値が増加する対角行列:")
print(diagonal_matrix)
出力:
値が増加する対角行列:
[[1. 0. 0. 0. 0.]
[0. 2. 0. 0. 0.]
[0. 0. 3. 0. 0.]
[0. 0. 0. 4. 0.]
[0. 0. 0. 0. 5.]]
応用例 5: 数値計算での使用例
単位行列は、線形代数で以下のような場面でも使われます:
- 逆行列の計算: 行列の逆行列を計算する際、結果が単位行列に近いかどうかで計算の正しさを検証します。
- 線形方程式の解法: 例えば、行列 A⋅X=BA \cdot X = B の解 XX を求める際に利用します。
コード例: 線形方程式の解法
import numpy as np
# 行列AとB
A = np.array([[2, 1], [1, 3]])
B = np.array([5, 6])
# 線形方程式の解Xを求める
X = np.linalg.solve(A, B)
print("解X:")
print(X)
出力:
解X:
[1. 2.]
まとめ
numpy.eye()
を利用すると、簡単に単位行列を生成できる。- 単位行列は行列演算や特定の対角成分を持つ行列の作成に応用できる。
- 配列の操作と組み合わせることで、独自のカスタム行列も作成可能。
- 数値計算や線形代数の分野で非常に重要な役割を果たす。
単位行列は、Pythonで高度な数値処理を行う際の基本となるツールです。初心者のうちからその操作に慣れておくと、後々役立つシーンが多くなります。
配列生成の応用例
これまでに学んだ numpy.arange()
、numpy.linspace()
、numpy.zeros()
、numpy.ones()
、numpy.full()
、そして numpy.eye()
といった配列生成方法を組み合わせることで、より複雑で実用的な配列を作成することができます。この章では、学んだ内容を基にいくつかの応用例を紹介します。
配列の組み合わせでカスタム行列を作成
配列を生成する関数を組み合わせることで、特定の形状や特徴を持つカスタム行列を作成できます。
例 1: 対角部分以外を特定の値で埋めた行列を作成
import numpy as np
# 4×4の単位行列を生成
identity = np.eye(4)
# 対角成分以外を5で埋める
custom_matrix = np.full((4, 4), 5) - np.eye(4) * 5 + identity
print("対角部分以外を5で埋めた行列:")
print(custom_matrix)
出力:
対角部分以外を5で埋めた行列:
[[1. 5. 5. 5.]
[5. 1. 5. 5.]
[5. 5. 1. 5.]
[5. 5. 5. 1.]]
数値のパターンを持つ配列を作成
NumPy の配列生成関数を活用すると、規則的なパターンを持つ配列を簡単に作成できます。
例 2: チェッカーパターンの生成 チェス盤のような白黒模様を数値で表現する配列を作成します。
import numpy as np
# 8×8のチェッカーパターンを作成
pattern = np.zeros((8, 8))
pattern[1::2, ::2] = 1 # 奇数行の偶数列を1に
pattern[::2, 1::2] = 1 # 偶数行の奇数列を1に
print("チェッカーパターン:")
print(pattern)
出力:
チェッカーパターン:
[[0. 1. 0. 1. 0. 1. 0. 1.]
[1. 0. 1. 0. 1. 0. 1. 0.]
[0. 1. 0. 1. 0. 1. 0. 1.]
[1. 0. 1. 0. 1. 0. 1. 0.]
[0. 1. 0. 1. 0. 1. 0. 1.]
[1. 0. 1. 0. 1. 0. 1. 0.]
[0. 1. 0. 1. 0. 1. 0. 1.]
[1. 0. 1. 0. 1. 0. 1. 0.]]
条件に基づいて配列を操作
NumPy では、条件を使った配列の操作が可能です。生成した配列に対して条件を適用し、新しい配列を作成できます。
例 3: 偶数だけを含む配列の作成
import numpy as np
# 0から20未満の配列を生成
arr = np.arange(20)
# 偶数のみを取り出す
even_numbers = arr[arr % 2 == 0]
print("偶数のみを含む配列:")
print(even_numbers)
出力:
偶数のみを含む配列:
[ 0 2 4 6 8 10 12 14 16 18]
特定の形状を持つ配列の作成
配列生成関数を組み合わせて、特定の形状や値の分布を持つ配列を作成することも可能です。
例 4: 増加する対角行列
import numpy as np
# サイズ6の増加する対角行列
values = np.arange(1, 7)
diagonal_matrix = np.diag(values)
print("増加する対角行列:")
print(diagonal_matrix)
出力:
増加する対角行列:
[[1 0 0 0 0 0]
[0 2 0 0 0 0]
[0 0 3 0 0 0]
[0 0 0 4 0 0]
[0 0 0 0 5 0]
[0 0 0 0 0 6]]
多次元配列の生成と操作
NumPy は多次元配列(2次元以上)を扱うのが得意です。例えば、3次元配列を生成して操作することも簡単にできます。
例 5: 3次元配列を生成し、特定の条件で値を変更
import numpy as np
# 3×3×3の配列を生成(すべての要素を0で初期化)
arr = np.zeros((3, 3, 3))
# 条件に基づいて特定の位置に値を設定
arr[1, :, :] = 5 # 2番目の「層」を5で埋める
arr[:, 1, :] = 10 # 2番目の「行」を10で埋める
print("3次元配列:")
print(arr)
出力(省略):
3次元配列:
[[[ 0. 10. 0.]
[10. 10. 10.]
[ 0. 10. 0.]]
[[ 5. 5. 5.]
[10. 10. 10.]
[ 5. 5. 5.]]
[[ 0. 10. 0.]
[10. 10. 10.]
[ 0. 10. 0.]]]
実践課題: 配列生成の練習
以下の条件に従って配列を生成してみましょう。
課題 1: 0~19の範囲で偶数だけを持つ配列を作成し、逆順に並び替えましょう。
# 解答例
arr = np.arange(0, 20, 2)[::-1]
print(arr)
課題 2: 4×4の行列を生成し、行ごとに値を増加させて埋めてみましょう。
# 解答例
arr = np.arange(1, 17).reshape((4, 4))
print(arr)
まとめ
- 配列生成関数を組み合わせることで、カスタマイズされた配列や行列を簡単に作成できる。
- 条件やインデックスを活用することで、柔軟な配列操作が可能になる。
- 実際のプロジェクトでは、このような配列生成がデータのシミュレーションや準備に役立つ。
配列生成の応用は、データ処理や分析だけでなく、機械学習やゲームプログラミングなど幅広い分野で重要です。これらのスキルを活用して、効率的に配列操作を行いましょう!
まとめと次回予告
今回の内容を振り返って
本記事では、Pythonの数値計算ライブラリ NumPy を使った「配列生成」に関する基本的な方法から応用例までを学びました。以下に内容を振り返ります:
- 基本の配列生成方法
numpy.arange()
を使った一定間隔の配列生成。numpy.linspace()
を使った等間隔の配列生成。arange()
とlinspace()
の違いを理解。
- 特定の値で構成された配列の生成
numpy.zeros()
、numpy.ones()
、numpy.full()
を使って特定の値で埋められた配列を生成。numpy.eye()
を使った単位行列の生成。
- 単位行列の応用例
- 単位行列を使った行列演算や対角行列の作成。
- NumPy の配列操作を活用して、特定の形状やパターンを持つ行列を生成。
- 配列生成の応用例
- チェッカーパターンや条件付きの配列生成。
- 多次元配列の作成と操作。
- 実践的な課題を通じた練習。
この記事で学んだことをどう活用するか
配列の生成と操作は、Pythonを使ったデータ処理や計算の土台となるスキルです。たとえば:
- データ分析:データのモック(仮データ)作成やデータの前処理に役立つ。
- 機械学習:重み行列やバイアスベクトルの初期化。
- シミュレーション:ランダムな環境やパターンの構築。
- ゲーム開発:グリッドや座標系の生成。
初学者の方は、ぜひこれらの方法を実際に手を動かして試し、どんな配列が生成されるか確認してください。また、コードを改変して遊ぶことでさらに理解が深まります。
次回予告:乱数生成について
次回の記事では、NumPyを使用した 乱数生成 に焦点を当てます。乱数は、データ分析やシミュレーションにおいて欠かせない要素の一つです。具体的には以下の内容を取り上げます:
- 基本的な乱数生成
numpy.random
を使った基本的な乱数の生成。- 一様分布や正規分布の乱数生成。
- 多次元配列の乱数生成
- 特定の形状を持つ乱数配列を作成。
- 応用例
- 乱数を使ったシミュレーション。
- サンプリングやシャッフル。
乱数生成はデータの多様性を生み出す重要な要素です。次回の記事で詳しく学びながら、さらなるPythonのスキルアップを目指しましょう!
コメント