前提
以下の画像のelevation内で,正の数で囲まれた領域内にある負の数を検知し,
別配列のcell_classに2という値で記録したいと考えています.
しかし,現時点ではnp.whereを使用し,正の数を0,負の数を-1にする処理しかできていません.
そこで,どのようにして正の数で囲まれた負の数を検知するのかご教授いただければと思います.

実現したいこと
- 正の数で囲まれた領域内にある負の数の検知
- 実際に適用する二次元配列のサイズは1000×1000以上のため,for文の使用をできるだけ避ける
- cell_classで2に該当する領域がどんなサイズであっても検知できるようにする
該当のソースコード
Python
1import numpy as np 2import pandas as pd 3 4elevation = np.array([ 5 [-1, -1, -1, -1, -1], 6 [-1, 10, 10, 10, 10], 7 [-1, 10, -1, 10, 10], 8 [-1, 10, -1, 10, 10], 9 [-1, 10, 10, 10, 10] 10 ]) 11 12cell_class = np.where(elevation >= 0, 0, -1) 13print(cell_class) 14 15#[[-1 -1 -1 -1 -1] 16 #[-1 0 0 0 0] 17 #[-1 0 -1 0 0] 18 #[-1 0 -1 0 0] 19 #[-1 0 0 0 0]]
何かの課題でしょうか? 
「for文の使用をできるだけ避ける」とありますが、質問のケースでは何ミリ秒以内なら良いのでしょうか?
コメントありがとうございます.内陸にある標高がマイナスの地点を探索する課題の一つです.
具体的に何ミリ秒以内なら良いという指標は設けていません.
しかし,課題では1500×1500程度の二次元配列(標高データ)に対して,正の数に囲まれた負の数の検知を
100地域に対して行う必要があります.その際にできるだけ早く処理を行いたいと考えており,
Pythonで遅いfor文を避けてnumpyやscipyを用いた行列計算のみで実現できるのではと思い
質問させていただきました.
計算速度に関わらず,for文を用いた処理でも大変ありがたいです.

回答2件
あなたの回答
tips
プレビュー


