回答編集履歴

2

d

2019/04/06 07:54

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -126,4 +126,38 @@
126
126
 
127
127
 
128
128
 
129
- division by zero はおこならい (最初の列目最後の列が両方とも0ではない)ことを仮定しています。
129
+ division by zero はおこならい (最初の列目+最後の列=0ではない)ことを仮定しています。
130
+
131
+
132
+
133
+ ## zero 除算対策版
134
+
135
+
136
+
137
+ 最初の列目+最後の列=0となることがある場合は、割れないので値を0とする場合
138
+
139
+
140
+
141
+ ```python
142
+
143
+ import numpy as np
144
+
145
+
146
+
147
+ a = np.array([[7, 2, 1, 3], [15, 4, 1, 5], [20, 5, 1, 10]], dtype=float)
148
+
149
+
150
+
151
+ s = (a[:, 0] + a[:, -1])[:, np.newaxis]
152
+
153
+ out = np.divide(a, s, out=np.zeros_like(a), where=s != 0)
154
+
155
+ print(out)
156
+
157
+ # [[0.7 0.2 0.1 0.3 ]
158
+
159
+ # [0.75 0.2 0.05 0.25 ]
160
+
161
+ # [0.66666667 0.16666667 0.03333333 0.33333333]]
162
+
163
+ ```

1

df

2019/04/06 07:54

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
 
38
38
 
39
- ```
39
+ ```python
40
40
 
41
41
  s = a[:, 0] + a[:, -1]
42
42
 
@@ -50,7 +50,7 @@
50
50
 
51
51
 
52
52
 
53
- ```
53
+ ```python
54
54
 
55
55
  s[:, np.newaxis]
56
56
 
@@ -82,7 +82,7 @@
82
82
 
83
83
 
84
84
 
85
- 左辺が (3, 4) の配列、右辺が (3, 1) の配列なので、
85
+ 左辺 `a` が (3, 4) の配列、右辺 `s[:, np.newaxis]` が (3, 1) の配列なので、
86
86
 
87
87
  右辺が (3, 1) -> (3, 4) に broadcast されてから除算される。
88
88
 
@@ -110,7 +110,7 @@
110
110
 
111
111
  ```
112
112
 
113
- としてから、配列 a と要素ごとの除算
113
+ としてから、配列 a と上の配列の要素ごとの除算
114
114
 
115
115
 
116
116
 
@@ -118,7 +118,7 @@
118
118
 
119
119
 
120
120
 
121
- ```
121
+ ```python
122
122
 
123
123
  a / s[:, np.newaxis] * 100
124
124