NumPyについて
QGISに限らずラスターデータを扱う際には、ラスターデータの各ピクセル値を一旦、配列に格納した上で、各ピクセル値にアクセスしていくことになります。 Pythonで配列を扱う際には、数値計算ライブラリであるNumPyを使用すると便利です。 実際にラスターデータにアクセスする前に、NumPyの基本的な機能を触ってみましょう。
Menu
NumPyのインポート
QGISのPythonコンソールでNumPyを使うには、まずNumPyをインポートします。
>>>import numpy as np
配列の基礎
まずは、1次元の配列AをNumPyを使って作ります。
NumPyではndarray
オブジェクトを使って以下のようにして作成することができます。
>>>A = np.array([1, 2, 3])
>>>A
array([1, 2, 3])
同様にして、2次元の配列Bを作ります。
2次元配列は[ ]
を入れ子にして表現します。
>>>B = np.array([[1, 2], [3, 4]])
>>>B
array([[1, 2],
[3, 4]])
同様にして3次元以上の配列は[ ]
を入れ子にすることで次元を拡張して作ることができます。
各要素はインデックスを指定して、配列の各要素を取得することができます。
>>>B[0][0]
1
>>>B[1][0]
3
配列の四則演算
配列のオブジェクト、ndarray
の要素は配列同様に加減乗除ができます。
配列の全ての要素に+1します。
>>>C = B + 1
>>>C
array([[2, 3],
[4, 5]])
配列の全ての要素に-3します。
>>>D = B - 3
>>>D
array([[-2, -1],
[0, 1]])
配列の全ての要素に*6します。
>>>E = B * 6
>>>E
array([[ 6, 12],
[18, 24]])
配列の全ての要素に/3します。
>>>F = B / 3
>>>F
array([[0.33333333, 0.66666667],
[1. , 1.33333333]])
配列同士の加減乗除を行うこともできます。
>>>G = E + F
>>>G
array([[ 6.33333333, 12.66666667],
[19. , 25.33333333]])
条件に合致するインデックスの取得
np.where()
を使用すると、条件に合致したインデックスを取得できます。
値が20より小さい要素のインデックスを取得してみましょう。
>>>np.where(G<20)
(array([0, 0, 1], dtype=int64), array([0, 1, 0], dtype=int64)
配列が2つ返ってきます。
2つを組み合わせたインデックス(0, 0)
(0, 1)
(1, 0)
が条件に合致したインデックスになります。
np.where()
の第二引数に条件を満たした場合の値、第三引数に条件を満たさなかった値を指定して、指定した値を入れた新たな配列を返すこともできます。
>>>np.where(G<20, 1, 0)
array([[1, 1],
[1, 0]])
NumPyのリファレンス
上記以外のNumPyライブラリの扱い方や操作方法は、NumPy公式ドキュメントを参照ください。
教材の利用に関するアンケート
本プロジェクトでは、教材の改良を目的とした任意アンケートを実施しています。ご協力いただける方は、アンケートにお進みください。ご協力のほどよろしくお願いいたします。※ 本アンケートの成果は、教材の改良のほか、学会での発表等の研究目的でも利用します。