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

回答編集履歴

1

説明追加

2021/05/10 09:11

投稿

ppaul
ppaul

スコア24672

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なので