teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

コード追記

2020/02/06 16:14

投稿

8524ba23
8524ba23

スコア38352

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

追記

2020/02/06 16:13

投稿

8524ba23
8524ba23

スコア38352

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
  ```