私は今,画像処理の勉強をしています.
その際for文を使わないでコードを書いています.
以下のような処理の方法が分からず,調べてもあまり検索にヒットしませんでした.
[処理したい内容]
2つの配列が,あります.
一つは画像の座標を格納している座標(zahyou).
もう一つがzahyou配列のインデックス値に対応する画素値を格納している配列(value)です.
このとき,zahyou配列には座標2と8が重複しており,それぞれに対応している画素値が20,200 と80,800とします.
重複している座標番号には,各画素値の加算した値を入れたいのですが,新しい配列に代入すると大きい値の方が入ってしまいます.
一番下段のほしい計算結果となるようにはいい方法がありますでしょうか?
その際for文を使わずに書けますでしょうか?
何卒よろしくお願いいたします.
python
1import numpy as np 2 3zahyou=[0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 8 , 10] 4value= [0,10,20,200,30,40,50,60,70,80,800,100] 5 6zahyou=np.array(zahyou) 7value=np.array(value) 8print(value) 9 10new_value=np.zeros(len(zahyou)) 11new_value[zahyou]=new_value 12 13print(new_value) 14#計算結果 15#[ 0. 10. 200. 30. 40. 50. 60. 70. 800. 0. 100. 0.] 16# 17#ほしい計算結果 18#[ 0. 10. 220. 30. 40. 50. 60. 70. 880. 0. 100. 0.]
追記
下記のように書けば画素値の加算は取得できるのですが,複数の座標を指定するとエラーになってしまいできません.
また取得したsum_valueをどのように対応する座標に戻せばよいかわかりません.
python
1#zahyou=[0, 1, 2, 2, 3, 4, 5, 6, 7, 8, 8 , 10] 2#value= [0,10,20,200,30,40,50,60,70,80,800,100] 3num=8 4num=np.array(num) 5indexes = [i for i, x in enumerate(zahyou) if x == ran] 6print(indexes) 7# [9,10] 8sum_value=np.sum(value[indexes]) 9print(sum_value) 10#880 11
回答2件
あなたの回答
tips
プレビュー