回答編集履歴
2
コード追記
answer
CHANGED
@@ -55,4 +55,47 @@
|
|
55
55
|
b5 = np.zeros(len(d1), dtype=bool)
|
56
56
|
b5[i2] = d1[i2] > 16 # 条件1を満たした要素のみ条件2を判定
|
57
57
|
print(b5) # [False True False False False False True False]
|
58
|
+
```
|
59
|
+
|
60
|
+
例題についても同じ考えでコードを書いてみましたが、最終結果が求めたい結果になっているかは分かりません。
|
61
|
+
```Python
|
62
|
+
import numpy as np
|
63
|
+
|
64
|
+
# numpyのarrayを作成:一時間ごとの機械の稼働状況。行は一時間ごと(6工場ある)、列は機械(2種類ある)の稼働状況を意味する
|
65
|
+
# →工場は1つで2台の機械=列があり、6時間分=行のデータといった例のほうが分かりやすい?
|
66
|
+
data_array = np.array([[1.1, 1.2],
|
67
|
+
[2.1, 2.2],
|
68
|
+
[3.1, 3.2],
|
69
|
+
[4.1, 4.2],
|
70
|
+
[5.1, 5.2],
|
71
|
+
[6.1, 6.2]])
|
72
|
+
|
73
|
+
# 各時間帯における電力消費
|
74
|
+
power_array = np.array([3.3 ,9.9 ,2.2 ,8.8 ,1.1 ,7.7])
|
75
|
+
|
76
|
+
# 電力消費が基準を超えているか判定する(ここでは閾値を5.0とする)
|
77
|
+
i1 = np.where( power_array > 5.0)
|
78
|
+
|
79
|
+
# 基準値を超える時間帯の「機械の稼働状況」と「電力消費」を出力する
|
80
|
+
print(data_array[i1])
|
81
|
+
#[[2.1 2.2]
|
82
|
+
# [4.1 4.2]
|
83
|
+
# [6.1 6.2]]
|
84
|
+
print(power_array[i1]) # [9.9 8.8 7.7]
|
85
|
+
|
86
|
+
# 閾値を再計算する
|
87
|
+
# 稼働状況の平均を更に2で割った数を割りかけする
|
88
|
+
gain = data_array[i1].mean() /2
|
89
|
+
print(gain) # 2.075
|
90
|
+
|
91
|
+
# 求めた値をもとの電力データにかける
|
92
|
+
power2_array = power_array.copy()
|
93
|
+
power2_array[i1] = power_array[i1] *gain # ここでは条件1を満たす要素だけ
|
94
|
+
print(power2_array) # [ 3.3 20.5425 2.2 18.26 1.1 15.9775]
|
95
|
+
|
96
|
+
# 閾値その2より大きいかどうかを求める(もともと16.0と書いてあったが、閾値は前段の計算結果によって変わることを強調するため、変更した)
|
97
|
+
print(gain**4) # 18.538406640625006
|
98
|
+
b2 = np.zeros(power_array.shape[0], dtype=bool)
|
99
|
+
b2[i1] = power2_array[i1] > gain**4
|
100
|
+
print(b2) # [False True False False False False]
|
58
101
|
```
|
1
追記
answer
CHANGED
@@ -38,4 +38,21 @@
|
|
38
38
|
# 両方を満たす結果
|
39
39
|
b = v1_array & v2_array
|
40
40
|
print(b) # [False True False True False False]
|
41
|
+
```
|
42
|
+
|
43
|
+
計算量を減らす方法
|
44
|
+
-----
|
45
|
+
条件1を満たした要素のみ条件2を判定する例です。
|
46
|
+
```Python
|
47
|
+
import numpy as np
|
48
|
+
|
49
|
+
d1 = np.array([1.8, 18.9, 8.1, 10.5, 15.6, 7.2, 18.2, 1.5])
|
50
|
+
i2 = np.where( d1 > 10) # この条件1を満たす要素のインデックス
|
51
|
+
d3 = d1[i2] * 1.0 # 条件1を満たす要素のみ1.0倍
|
52
|
+
|
53
|
+
# d3からいろいろ演算して新しい閾値16を得る
|
54
|
+
|
55
|
+
b5 = np.zeros(len(d1), dtype=bool)
|
56
|
+
b5[i2] = d1[i2] > 16 # 条件1を満たした要素のみ条件2を判定
|
57
|
+
print(b5) # [False True False False False False True False]
|
41
58
|
```
|