[Python基礎]NumPy配列の基礎

Python
スポンサーリンク

NumPyとは

Pythonのライブラリの一種であり、導入するとリストやディクショナリのような多次元配列の一種であるndarrayの宣言および操作が可能になります。

リストやディクショナリなど、Python標準の配列と違う特徴としては
ひとつの型のみで配列を構成し、タプルのようにndarrayも宣言された時点で配列の長さが決まります。また、文字型(str型)をndarrayに格納することはできません。

このような制約がある中、なぜNumPyが使われるのか解説します。

Pythonは動的型付け言語の一種であり、非常に書きやすい言語である一方、処理速度がどうしても遅いという欠点があります。大きな配列を用いた数値計算を標準の型(リストなど)でやると処理が重くなることは自明です。
そこで生まれたのがNumPyのndarrayという数値計算に特化した型です。NumPy自体が処理が速いネイティブコードの一種であるC言語で作られているので、配列による数値計算の高速化が実現できるわけです。

配列を用いた数値計算すなわち行列の計算であり、非常に利用機会が多いです。
一例として画像処理では、デジタル画像そのものが輝度値やRGB値など数値の集合体なのでNumPyが必須になります。

基本的な使用方法

以下のソースコードは

  • ndarrayの宣言
  • ndarrayの要素の型の確認
  • ゼロ配列の生成
  • 単位行列ライクな配列の生成
  • 比較演算子の振る舞い
  • 数値演算の振る舞い
  • ndarrayのコピー
  • ndarrayからリストへの変換

と、NumPyの中でも利用率が高そうなものをピックアップしてそれぞれソースコード内のコメントアウトで解説しています。
※従来は記事内で解説しておりましたが、当記事からはコメントアウトを用いての解説にしようかと考えていますwぜひコピペして試してみて下さい!

#numpy配列ndarrayの特徴
##pythonに標準ではいっている配列と違い、ひとつの型のみで構成かつ、タプル型のように宣言されたときに配列の長さが決まる
##その特性によって計算が非常に速いうえ、numpyの便利な計算クラスを利用できる
import numpy as np #numpyのインポート npと略すことが多い

array_list = [[1, 2, 3], [4, 5, 6]] #ndarrayに入れるためにあらかじめリストを作成
np_array = np.array(array_list) #ndarrayの宣言 ()内にそのまま数値を[]で書くことも可能。好みの問題で自身はリストを作った後宣言するのが好き
print(np_array)
print(type(np_array)) #numpy.ndarrayという型になっていることが確認できる。

np_array_float = np.array(array_list, np.float32) #配列内のデータ型宣言も可能
print(np_array_float)
print(np_array_float.dtype, "\n") #配列内のデータ型も確認可能

np_zero = np.zeros([2, 3]) #2行3列のゼロ配列を生成
print(np_zero)
np_zero1 = np.zeros_like(np_array) #ndarrayを含む既にある配列の形状のゼロ配列を生成する zerosの部分をonesに変えると同じ形で1のバージョンが出来る
print(np_zero1, "\n")

np_eye = np.eye(2) #単位行列の生成
print(np_eye, "\n")

print("numpyにおける演算子")
array_list2 = [[3, 2, 1], [6, 5, 4]]
na1 = np.array(array_list)
na2 = np.array(array_list2)
res = na1 == na2 #比較演算子が使用可能 その他もろもろも使える
print(res)
print(type(res)) #ndarrayにブール代数が入ることがわかる
print(res.dtype) #一応ブール代数であることを確認
print(na1 == array_list2, "\n") #python標準配列とも比較可能(ちなみにこの時はndarrayで返される)

na_sum = na1 + na2 #行列の足し算的な振る舞い
print(na_sum, "足し算結果\n")

na_mltp = na1 * na2 #それぞれの要素を単に掛けるだけ
print(na_mltp, "掛け算結果\n")
#その他もろもろの演算子も使用可能

#copyも可能
na_cp = np.copy(na1)
print(type(na_cp))

#ndarrayからlistに変換可能
#標準のlist()も可能だが多次元は変換不可なのでnumpyはtolistのほうが使い勝手が良い
na_list = na_cp.tolist()
print(na_list)
print(type(na_list))
マスルキン

当ブログ管理人のマスルキンです。

高専電気系学科に5年間在籍。卒業後は専攻科に進学し現在に至る。

生まれつき聴覚障害があり
補聴器の使用、コミュニケーションでは読唇や手話などを用いています。

当ブログでは
・プログラミング・研究関係の備忘録
・趣味(筋トレ、カメラ、プラモデル、etc...)
・自身の日常
などを自由気ままに皆様に発信いたします。

記事が皆様のお役に立てば幸いです。

マスルキンをフォローする
Python プログラミング
スポンサーリンク
マスルキンをフォローする
マスルキンの部屋

コメント

タイトルとURLをコピーしました