回答編集履歴

2

コード追記

2020/02/06 16:14

投稿

can110
can110

スコア38266

test CHANGED
@@ -113,3 +113,89 @@
113
113
  print(b5) # [False True False False False False True False]
114
114
 
115
115
  ```
116
+
117
+
118
+
119
+ 例題についても同じ考えでコードを書いてみましたが、最終結果が求めたい結果になっているかは分かりません。
120
+
121
+ ```Python
122
+
123
+ import numpy as np
124
+
125
+
126
+
127
+ # numpyのarrayを作成:一時間ごとの機械の稼働状況。行は一時間ごと(6工場ある)、列は機械(2種類ある)の稼働状況を意味する
128
+
129
+ # →工場は1つで2台の機械=列があり、6時間分=行のデータといった例のほうが分かりやすい?
130
+
131
+ data_array = np.array([[1.1, 1.2],
132
+
133
+ [2.1, 2.2],
134
+
135
+ [3.1, 3.2],
136
+
137
+ [4.1, 4.2],
138
+
139
+ [5.1, 5.2],
140
+
141
+ [6.1, 6.2]])
142
+
143
+
144
+
145
+ # 各時間帯における電力消費
146
+
147
+ power_array = np.array([3.3 ,9.9 ,2.2 ,8.8 ,1.1 ,7.7])
148
+
149
+
150
+
151
+ # 電力消費が基準を超えているか判定する(ここでは閾値を5.0とする)
152
+
153
+ i1 = np.where( power_array > 5.0)
154
+
155
+
156
+
157
+ # 基準値を超える時間帯の「機械の稼働状況」と「電力消費」を出力する
158
+
159
+ print(data_array[i1])
160
+
161
+ #[[2.1 2.2]
162
+
163
+ # [4.1 4.2]
164
+
165
+ # [6.1 6.2]]
166
+
167
+ print(power_array[i1]) # [9.9 8.8 7.7]
168
+
169
+
170
+
171
+ # 閾値を再計算する
172
+
173
+ # 稼働状況の平均を更に2で割った数を割りかけする
174
+
175
+ gain = data_array[i1].mean() /2
176
+
177
+ print(gain) # 2.075
178
+
179
+
180
+
181
+ # 求めた値をもとの電力データにかける
182
+
183
+ power2_array = power_array.copy()
184
+
185
+ power2_array[i1] = power_array[i1] *gain # ここでは条件1を満たす要素だけ
186
+
187
+ print(power2_array) # [ 3.3 20.5425 2.2 18.26 1.1 15.9775]
188
+
189
+
190
+
191
+ # 閾値その2より大きいかどうかを求める(もともと16.0と書いてあったが、閾値は前段の計算結果によって変わることを強調するため、変更した)
192
+
193
+ print(gain**4) # 18.538406640625006
194
+
195
+ b2 = np.zeros(power_array.shape[0], dtype=bool)
196
+
197
+ b2[i1] = power2_array[i1] > gain**4
198
+
199
+ print(b2) # [False True False False False False]
200
+
201
+ ```

1

追記

2020/02/06 16:13

投稿

can110
can110

スコア38266

test CHANGED
@@ -79,3 +79,37 @@
79
79
  print(b) # [False True False True False False]
80
80
 
81
81
  ```
82
+
83
+
84
+
85
+ 計算量を減らす方法
86
+
87
+ -----
88
+
89
+ 条件1を満たした要素のみ条件2を判定する例です。
90
+
91
+ ```Python
92
+
93
+ import numpy as np
94
+
95
+
96
+
97
+ d1 = np.array([1.8, 18.9, 8.1, 10.5, 15.6, 7.2, 18.2, 1.5])
98
+
99
+ i2 = np.where( d1 > 10) # この条件1を満たす要素のインデックス
100
+
101
+ d3 = d1[i2] * 1.0 # 条件1を満たす要素のみ1.0倍
102
+
103
+
104
+
105
+ # d3からいろいろ演算して新しい閾値16を得る
106
+
107
+
108
+
109
+ b5 = np.zeros(len(d1), dtype=bool)
110
+
111
+ b5[i2] = d1[i2] > 16 # 条件1を満たした要素のみ条件2を判定
112
+
113
+ print(b5) # [False True False False False False True False]
114
+
115
+ ```