回答編集履歴

1

説明に誤りがあった。

2021/10/18 12:20

投稿

sakuramochi_py
sakuramochi_py

スコア32

test CHANGED
@@ -1,6 +1,36 @@
1
1
  凄く前の質問ですが自己満足のために書きます。
2
2
 
3
3
 
4
+
5
+ スライスの各座標に対応する引数はブロードキャストされるので、
6
+
7
+ arr[[0,2],2]はarr[[0,2],[2,2]]となります。
8
+
9
+ arrのインデックス0と2それぞれのインデックス2, 2となるので[2,8]になります。
10
+
11
+ しかし、arr[[0,2],2:]はスライスとは異なります。
12
+
13
+ 試しにarr[[0,2],1:]でやってみると、
14
+
15
+ ```python
16
+
17
+ >>> arr[[0,2],1:]
18
+
19
+ array([[1, 2],
20
+
21
+ [7, 8]])
22
+
23
+ ```
24
+
25
+ となり、インデックス0と2それぞれの[1:]が出力されます。
26
+
27
+ [2:]でも同様の処理がなされるため、
28
+
29
+ arr[[0,2],2:]はインデックス0と2の[2:]が出力されて[[2],[8]]になります。
30
+
31
+
32
+
33
+ ###個人的な考え方
4
34
 
5
35
  Numpyはスライス時にもブロードキャストを行うので、
6
36
 
@@ -34,7 +64,7 @@
34
64
 
35
65
 
36
66
 
37
- ではどのような計算が行われているかというと、逆にスライスの第一引数がブロードキャストされているのです。
67
+ ではどのような計算が行われているかというと、逆にスライスの第一引数が変形されているのです。
38
68
 
39
69
 
40
70
 
@@ -52,7 +82,7 @@
52
82
 
53
83
  となっています。
54
84
 
55
- 第一引数がブロードキャストされているので、計算を順に表してみましょう。
85
+ 第一引数が変形されているので、計算を順に表してみましょう。
56
86
 
57
87
 
58
88