回答編集履歴
1
d
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
> data[::-1]をしてから、sortされるので、
|
2
2
|
|
3
|
-
`data[::-1]` してから sort されるという認識は正しいですが、ソート前の
|
3
|
+
`data[::-1]` してから sort されるという認識は正しいですが、ソート前の配列がどのような並び順であろうとも、ソート後の結果は同じになります。
|
4
4
|
numpy の sort は昇順ソート (小さい順) される仕様です。
|
5
5
|
|
6
6
|
今回、混乱の原因となっているのは、numpy の view と ndarray.sort() が inplace でソートする仕様というのが関係しています。
|
@@ -8,11 +8,20 @@
|
|
8
8
|
とりあえず、意図通りにソートしたい場合は、ndarray.sort() でなく、numpy.sort() をお使いください。
|
9
9
|
|
10
10
|
```python
|
11
|
+
|
11
12
|
import numpy as np
|
12
13
|
|
13
14
|
a = np.array([9, 2, 3, 4, 10, 6, 7, 8, 1, 5])
|
15
|
+
|
16
|
+
# 小さい順
|
14
17
|
b = np.sort(a)
|
15
18
|
print(b) # [ 1 2 3 4 5 6 7 8 9 10]
|
19
|
+
|
20
|
+
# 大きい順にソートしたい場合はあとから反転
|
21
|
+
print(b[::-1]) # [10 9 8 7 6 5 4 3 2 1]
|
22
|
+
|
23
|
+
# もしくは1次元配列なら組み込み関数 sorted()
|
24
|
+
print(sorted(b, reverse=True)) # [10 9 8 7 6 5 4 3 2 1]
|
16
25
|
```
|
17
26
|
|
18
27
|
## 今回の原因
|
@@ -27,10 +36,10 @@
|
|
27
36
|
```
|
28
37
|
|
29
38
|
今回のストライドを確認すると、4 bytes となっています。(int32型は1つの要素が4バイトで表される)
|
30
|
-
なので、a の2
|
39
|
+
なので、a のインデックスが2の要素にアクセスしたい場合は、内部の1次元配列の先頭から 2*4=8 bytes 目を参照すればよいということがわかります。
|
31
40
|
|
32
41
|
今、`b = a[::-1]` とした場合、これは `a` を逆順にした別の配列 `b` というのが作られるわけではなく、ストライドで内部の1次元配列のアクセスの仕方を変更するだけで、実態は `a` と同じものになります。
|
33
|
-
ストライドは -4 bytes となっていて、b の2
|
42
|
+
ストライドは -4 bytes となっていて、b のインデックスが2の要素にアクセスしたい場合は、内部の1次元配列の 末尾から -2*4=-8 bytes 目を参照すればよいということがわかります。
|
34
43
|
|
35
44
|
```
|
36
45
|
b = a[::-1]
|