パイクラおじさんの日記

MinecraftでPythonを勉強するおじさんの日記です。

範囲を指定しての切り出し

配列から任意の範囲を指定して切り出したい。

例えば、池とその周辺だけとか。

npyext.pyとして作成した。

# coding: utf-8

import numpy as np
import sys

NPY_DIR = "/Users/pycra/Desktop/NPY_DATA"

if len(sys.argv) < 4:
    print("npyext.py npyfilename ymin:ymax xmin:xmax")
    exit(-1)

(ymin, ymax) = sys.argv[2].split(":")
(xmin, xmax) = sys.argv[3].split(":")

array = np.load(NPY_DIR+"/"+sys.argv[1])

extarray = array[int(ymin):int(ymax), int(xmin):int(xmax)].copy()  # 実体

np.save(NPY_DIR+"/extract.npy", extarray)

5340-22の3次メッシュ(12)下図の左側の「へ」の字型の池「下夕田池(しもんたいけ)」を切り出したい。

f:id:pycra:20170923062555p:plain
「へ」の字型の池を切り出す

グラフから座標を読み取り、npyext.pyに指定する。

$ python npyext.py npy_5x5-5340-22-12.npy 100:300 0:300

切り出した.npyファイルをplotnpy.pyにてプロットしたのがコレ。

f:id:pycra:20170923062823p:plain
実行結果

注意

出力ファイル名が固定(“extract.npy”)なので、上書きに注意。

.npyファイルのshapeを調べる

任意のサイズの配列の.npyファイルが作れるようになったので、その.npyファイルのshapeを調べるプログラム(npyshape.py)を作った。

# coding: utf-8

import numpy as np
import sys

NPY_DIR = "/Users/pycra/Desktop/NPY_DATA"

if len(sys.argv) < 2:
    print("npyshape.py npyfilename")
    exit(-1)

array = np.load(NPY_DIR+"/"+sys.argv[1])

print(array.shape)

実行結果。

$ python npyshape.py extract.npy
(200, 300)