回答編集履歴
2
コード追記
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
追記
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
|
+
```
|