NumPyについて

QGISに限らずラスターデータを扱う際には、ラスターデータの各ピクセル値を一旦、配列に格納した上で、各ピクセル値にアクセスしていくことになります。 Pythonで配列を扱う際には、数値計算ライブラリであるNumPyを使用すると便利です。 実際にラスターデータにアクセスする前に、NumPyの基本的な機能を触ってみましょう。

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公式ドキュメントを参照ください。

教材の利用に関するアンケート

 本プロジェクトでは、教材の改良を目的とした任意アンケートを実施しています。ご協力いただける方は、アンケートにお進みください。ご協力のほどよろしくお願いいたします。

※ 本アンケートの成果は、教材の改良のほか、学会での発表等の研究目的でも利用します。

results matching ""

    No results matching ""