質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Q&A

解決済

1回答

269閲覧

土地被覆ごとのプロット数を数える

reado

総合スコア6

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

0グッド

1クリップ

投稿2022/06/20 06:59

前提

色分けした図と散布図を重ね合わせて、それぞれの色の上に存在するプロット数をカウントしようと考えています(どの土地被覆で一番プロットが多いかを調査)。
プロットの数ではなく、地図の画素の方を数えてしまっています(エラーなし)。
散布図を土地被覆に紐づけて区分する点で詰まっています。
2つのレイヤ間は同じ解像度で位置にずれはないと考えられます。
なにかお気づきの点がありましたらご教示いただけますと幸いです。

実現したいこと

土地被覆ごとのプロットの数を明らかにしたい。

試したこと

python

1###画像の色分離 2land_color = np.array(img)#画像の色をland_colorに格納 3r=land_color[:,:,0]#R 4g=land_color[:,:,1]#G 5b=land_color[:,:,2]#B 6 7land_color[np.where(r==194)]=A#grayを抽出してAとラベリング 8land_color[np.where(r==140)]=B#brownを抽出してBとラベリング 9land_color[np.where(r==61)]=C#greenを抽出してCとラベリング 10 11###散布図 12fig = plt.figure(figsize = (5,5)) 13ax_data = fig.add_axes((1, 1, 1, 1)) 14ax_data.scatter(x_list, y_list, 'o', color = 'black') 15 16###カウント 17sum_A=len(x_list[A])#(y座標でも検証済) 18sum_B=len(x_list[B]) 19sum_C=len(x_list[C])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コードが断片的かつx_listなどの変数の型ももろもろ不明なので、基本的なコード例を示します。

測定点の位置リスト?から「測定点のみが1である行列」を作成します。
あとはこの行列と「特定の色である部分のみが1(True)となる行列」と掛け合わせると
その色上にある測定点のみ1となるのでそれを合計すればよいです。

Python

1import numpy as np 2 3# 色分けされた図 4land = np.array([ 5 [1,1,1,1,1], # AAAAA 6 [2,2,2,1,1], # BBBAA 7 [3,3,2,2,2], # CCBBB 8 [3,3,3,3,3]]) # CCCCC 9A,B,C = [1,2,3] 10 11# 測定点の位置リスト 12x_list = [0,4,2,3,4,2] 13y_list = [0,0,1,1,2,3] 14# x___x 15# __xx_ 16# ____x 17# __x__ 18 19# 測定点のみが1である行列を作成 20plot = np.zeros(shape=land.shape, dtype=int) 21plot[y_list,x_list] = 1 22print(plot) 23#[[1 0 0 0 1] 24# [0 0 1 1 0] 25# [0 0 0 0 1] 26# [0 0 1 0 0]] 27 28# 「(land==A)」=Aである部分のみが1(True)となる行列 と 29# 測定点が1である行列を掛け合わせた結果 30print( (land==A) * plot ) 31#[[1 0 0 0 1] 32# [0 0 0 1 0] 33# [0 0 0 0 0] 34# [0 0 0 0 0]] 35 36# 重ね合わせて残った部分の「1」を合計 37print( np.sum( (land==A) * plot ) ) # 3 38print( np.sum( (land==B) * plot ) ) # 2 39print( np.sum( (land==C) * plot ) ) # 1

投稿2022/06/20 07:49

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reado

2022/06/23 06:57

ありがとうございます! 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問