回答編集履歴
1
説明追加
answer
CHANGED
@@ -3,10 +3,16 @@
|
|
3
3
|
大雑把にいうと&演算子は、__and__を呼び出しに変換されます。
|
4
4
|
|
5
5
|
```
|
6
|
+
このあたりの詳しいことは、[3.3.8. 数値型をエミュレートする](https://docs.python.org/ja/3/reference/datamodel.html?highlight=__add__#emulating-numeric-types)をお読みください。
|
7
|
+
|
6
8
|
Lily_1007さんのご質問ではdxはリストのように読めますが、リストだと&よりも前に、abs(dx)でエラーになります。abs(dx)が正しく動くのであれば、dxはnumpyのndarrayである可能性が高いので、そのように仮定して説明します。
|
7
9
|
|
10
|
+
```explanation
|
8
|
-
ndarrayの場合、&演算子は要素ごとの論理積になります。
|
11
|
+
ndarrayの場合、&演算子は要素ごとの論理積になります。つまり、numpyの開発者が、ndarrayでの__and__を要素ごとの論理積として定義したと言うことです。
|
12
|
+
```
|
9
13
|
|
14
|
+
実行してみると以下のようになっています。
|
15
|
+
|
10
16
|
```python
|
11
17
|
>>> import numpy as np
|
12
18
|
>>> dx = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
|
@@ -24,6 +30,8 @@
|
|
24
30
|
[ True True True False False False False False False False False]
|
25
31
|
```
|
26
32
|
|
33
|
+
これを元に、Lily_1007さんの答えが合っているかどうか検証してみましょう。
|
34
|
+
|
27
35
|
(abs(dx) < r_box)を満たしているdxのindexは0, 1, 2で,
|
28
36
|
(abs(dy) < r_box)を満たしているdyのindexは0 ~ 10で,
|
29
37
|
(abs(dz) < r_box)を満たしているdzのindexは0 ~ 10なので
|