PythonとNumPyの基本的な使い方
Pythonは高性能な科学計算ライブラリNumPyと組み合わせて使用されることが多いです。
この記事では、NumPyの基本的な使い方を10個のソースコード例を通して解説していきます。
1. NumPy配列の作成
NumPyを使用するためにはまず、NumPyモジュールをインポートします。
そして、np.array()関数を使用してNumPy配列を作成します。
ソースコード例
1 2 3 4 5 6 7 8 |
import numpy as np def main(): a = np.array([1, 2, 3]) print(a) if __name__ == "__main__": main() |
出力結果
[1 2 3]
KindleUnlimited会員であれば、全ての本をご覧頂けます。 リストとラムダ式を理解すれば、Pythonプログラミングの世界が変わる 第1版
2. 二次元配列の作成
NumPyでは2次元配列や多次元配列も作成することが可能です。
それでは、二次元配列を作成してみましょう。
ソースコード例
1 2 3 4 5 6 7 8 |
import numpy as np def main(): b = np.array([[1, 2, 3], [4, 5, 6]]) print(b) if __name__ == "__main__": main() |
出力結果
[[1 2 3]
[4 5 6]]
3. 配列の形状とデータ型の確認
NumPy配列の形状はshape属性で、データ型はdtype属性で確認できます。
ここでは、先ほど作成した二次元配列の形状とデータ型を確認してみましょう。
ソースコード例
1 2 3 4 5 6 7 8 9 |
import numpy as np def main(): b = np.array([[1, 2, 3], [4, 5, 6]]) print("Shape:", b.shape) print("Data type:", b.dtype) if name == "main": main() |
出力結果
Shape: (2, 3)
Data type: int64
4. NumPy配列の初期化
NumPyでは、特定の値で初期化された配列を作成することも可能です。
例えば、すべての要素が0や1の配列や、特定の形状の空の配列などを作成できます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import numpy as np def main(): zeros = np.zeros((3,3)) ones = np.ones((3,3)) empty = np.empty((3,3)) print("Zeros:\n", zeros) print("Ones:\n", ones) print("Empty:\n", empty) if __name__ == "__main__": main() |
出力結果
Zeros:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
Ones:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
Empty:
[[6.9462211e-310 4.6837544e-310 0.0000000e+000]
[0.0000000e+000 0.0000000e+000 0.0000000e+000]
[0.0000000e+000 0.0000000e+000 0.0000000e+000]]
5. NumPy配列の要素へのアクセス
NumPy配列の要素にアクセスする方法も、Pythonのリストと同様にインデックスを使います。
ただし、NumPy配列では多次元配列も扱うことができるため、その場合は複数のインデックスをカンマで区切って指定します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import numpy as np def main(): # 1次元配列 arr1 = np.array([1, 2, 3, 4, 5]) print(arr1[2]) # 3番目の要素にアクセス # 2次元配列 arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr2[1, 2]) # 2行3列目の要素にアクセス if __name__ == '__main__': main() |
出力結果
3
6
ポイント
インデックスは0から始まります。つまり、最初の要素はインデックス0、2番目の要素はインデックス1となります。
また、多次元配列の場合は行と列の順にインデックスを指定します。
5.1. スライシング
また、Pythonのリストと同様に、NumPy配列でもスライシングを利用することができます。
スライシングを利用すると、配列の一部を取り出すことができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 |
# 1次元配列 arr1 = np.array([1, 2, 3, 4, 5]) print(arr1[1:4]) # 2番目から4番目までの要素にアクセス # 2次元配列 arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr2[0:2, 1:3]) # 1-2行目と2-3列目の部分配列にアクセス if __name__ == '__main__': main() |
出力結果
[2 3 4]
[[2 3]
[5 6]]
ポイント
スライシングでは、開始インデックスは含まれ、終了インデックスは含まれないことに注意してください。
つまり、「arr[1:4]」は2番目、3番目、4番目の要素を取り出します。
6. NumPy配列の形状変更
NumPy配列では、形状を変更することができます。
これには「reshape」関数を使用します。
ソースコード例
1 2 3 4 5 6 7 8 9 |
import numpy as np def main(): arr = np.array([1, 2, 3, 4, 5, 6]) reshaped_arr = arr.reshape((2, 3)) # 形状を(2, 3)に変更 print(reshaped_arr) if __name__ == '__main__': main() |
出力結果
[[1 2 3]
[4 5 6]]
ポイント
reshape関数を使う際は、新しい形状の全要素数(行数×列数)が、元の配列の全要素数と同じであることを確認してください。
そうでない場合、エラーが発生します。
7. NumPy配列の連結
NumPy配列では、複数の配列を連結して一つの配列にすることも可能です。
これには「concatenate」関数を使用します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 |
import numpy as np def main(): arr1 = np.array([1, 2, 3]) arr2 = np.array([4, 5, 6]) concatenated_arr = np.concatenate([arr1, arr2]) # arr1とarr2を連結 print(concatenated_arr) if __name__ == '__main__': main() |
出力結果
[1 2 3 4 5 6]
ポイント
concatenate関数の引数はリスト形式で渡す必要があります。
また、連結する配列は同じ次元である必要があります。
6. NumPy配列の要素の変更
NumPy配列の特定の要素を変更するには、インデックスを使ってアクセスし、新しい値を代入します。
これはPythonのリストと同じように行えます。
ソースコード例
1 2 3 4 5 6 7 8 9 |
import numpy as np def main(): a = np.array([1, 2, 3]) a[0] = 100 print(a) if __name__ == "__main__": main() |
出力結果
[100 2 3]
7. NumPy配列のスライシング
Pythonのリストと同様に、NumPy配列もスライシングを使って部分的にアクセスすることができます。
スライスは範囲を指定して部分配列を取り出す操作です。
ソースコード例
1 2 3 4 5 6 7 8 9 |
import numpy as np def main(): a = np.array([0, 1, 2, 3, 4, 5]) b = a[1:4] print(b) if __name__ == "__main__": main() |
出力結果
[1 2 3]
8. NumPy配列の連結
NumPyでは、複数の配列を連結して新しい配列を作ることができます。
これにはnp.concatenate
関数を使用します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 |
import numpy as np def main(): a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.concatenate([a, b]) print(c) if __name == "main": main() |
出力結果
[1 2 3 4 5 6]
9. NumPy配列の形状変更
NumPy配列は形状を自由に変更することができます。
1次元配列を2次元配列に、またその逆の変換も可能です。
これにはreshape
関数を使用します。
ソースコード例
1 2 3 4 5 6 7 8 9 |
import numpy as np def main(): a = np.array([0, 1, 2, 3, 4, 5]) b = a.reshape(2, 3) print(b) if __name__ == "__main__": main() |
出力結果
[[0 1 2]
[3 4 5]]
10. NumPy配列の転置
NumPy配列は転置を行うことができます。
転置とは行と列を入れ替える操作で、行列の計算でよく用いられます。
これにはT
属性を使用します。
ソースコード例
1 2 3 4 5 6 7 8 9 |
import numpy as np def main(): a = np.array([[0, 1, 2], [3, 4, 5]]) b = a.T print(b) if __name__ == "__main__": main() |
出力結果
[[0 3]
[1 4]
[2 5]]
まとめ
以上、PythonのNumPyライブラリの基本的な使い方について10のソースコード例を通じて解説しました。
NumPyは、数値計算を効率的に行うためのライブラリで、配列や行列の操作に特化しています。
一見難しそうに見えるかもしれませんが、一つ一つの操作を理解していくと、それほど難しくありません。
これらの基本的な操作をマスターすれば、データ分析や機械学習など、幅広い分野でPythonを活用することができます。
ぜひ、今回紹介したソースコードを実際に動かしてみて、実感しながら学んでみてください。
コードを書くことで理解が深まるのはプログラミングの大きな特徴です。
自分でコードを書き、動かし、考えることで、より深くPythonとNumPyを理解することができます。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!