お世話になります。Numpyの操作が分からず、ご質問します。
実現したいこと
実現したいことを一言で表現すると
「floatが格納された1次元の配列に、閾値によってフィルタリングしてboolに変換した後に、もう一度違う値の閾値でフィルタリングしてboolに変換した後に、もとのboolの配列とマージする」ということをしたいです。
イメージとしては次のような感じです
1.まず、次のような数字データがあったとします。
--
2.このデータに対して、ある閾値(ここでは10.0)を超えるものと超えないものでbool化します。
--
3.TRUEのところだけ抜き出して、抜き出した部分を1.0倍するとします。(分かりにくいですが・・)
--
4.抜き出したデータから更に演算して新しい閾値を求めます。抜き出したデータからとある演算をして閾値が16.0になったとします。新しい閾値を用いて更にBool化します。
--
5.もとの「2.」のbool値のTRUEのところに「4.」の結果を代入する形で、もう一度boolの配列を作ってカラーマップで出力する。(今回はカラーマップで出力することが本質ではないので割愛します)
例題
上記の説明では分かりにくいと思うので、次のような例題を考えます。(問題設定がやや強引なこと、加えて「実現したいこと」で例示したものと数字が違いますが、突っ込まないで頂ければと思います・・・)
- とある工場で、『機械の稼働状況』と『電力消費量』の2種類のデータが得られた
- この工場の電力消費量の基準値を超える時間帯を検出したい
- まず電力消費量が基準料を超える時間帯を出力し、そのときの機械の稼働状況と電力消費量を出力する
- 次に検出された時間帯の電力消費量は機械にかなり負担をかけた運転をしているものとして、電力消費量が基準料を超える時間帯の『機械の稼働状況』を平均して1/2をしたものゲインとして求めて、このゲインを電力消費量が基準料を超える時間帯の『電力消費量』に掛ける(複雑ですが、工場内で経験的に使われている計算だと思って下さい)
- さらに、前の項目で求めたゲインを4乗して新しい基準値を求め、前の項目でゲイン倍した『電力消費量』が新しい基準値を超えているかどうかを判定する
- 最終的にboolの配列を求める
最終形として、[false ,true ,false true ,false ,false]
となっていれば正解です.
試したこと
途中まで作成しましたが、次のとおりです。
python
1import numpy as np 2 3# numpyのarrayを作成:一時間ごとの機械の稼働状況。行は一時間ごと(6工場ある)、列は機械(2種類ある)の稼働状況を意味する 4data_array = np.array([[1.1, 1.2], 5 [2.1, 2.2], 6 [3.1, 3.2], 7 [4.1, 4.2], 8 [5.1, 5.2], 9 [6.1, 6.2]]) 10# 各時間帯における電力消費 11power_array = np.array([3.3 ,9.9 ,2.2 ,8.8 ,1.1 ,7.7]) 12 13# 電力消費が基準を超えているか判定する(ここでは閾値を5.0とする) 14v1_array = power_array > 5.0 15 16# 基準値を超える時間帯の「機械の稼働状況」と「電力消費」を出力する 17print(data_array[v1_array ]) 18print(power_array[v1_array ]) 19 20# 閾値を再計算する 21# 稼働状況の平均を更に2で割った数を割りかけする 22gain = data_array[v1_array ].mean() /2 23 24# 求めた値をもとの電力データにかける 25power2_array = power_array[v1_array] *gain 26 27# 閾値その2より大きいかどうかを求める(もともと16.0と書いてあったが、閾値は前段の計算結果によって変わることを強調するため、変更した) 28v2_array = power2_array > gain**4 29 30# v1_arrayのTUREのところにv2_arrayの結果をはめ込みたいのに、ここから先が分からない!!
やや複雑ですが、アイディアを頂ければと思います。
回答2件
あなたの回答
tips
プレビュー