回答編集履歴
6
d
test
CHANGED
@@ -86,9 +86,9 @@
|
|
86
86
|
|
87
87
|
1. [numpy.lexsort](https://docs.scipy.org/doc/numpy/reference/generated/numpy.lexsort.html) で点一覧を xyz 順にソートする。
|
88
88
|
|
89
|
-
1. `
|
89
|
+
1. `x_pos = np.nonzero(np.diff(points[:, 0]))[0] + 1` で x 座標が変わるインデックスを調べる。
|
90
90
|
|
91
|
-
1. `
|
91
|
+
1. `y_pos = np.nonzero(np.diff(points[:, 1]))[0] + 1` で y 座標が変わるインデックスを調べる。
|
92
92
|
|
93
93
|
1. `np.unique(np.concatenate([x_pos, y_pos]))` で x または y 座標が変わるインデックスを取得する。
|
94
94
|
|
5
d
test
CHANGED
@@ -144,6 +144,6 @@
|
|
144
144
|
|
145
145
|
print(f"x={group[0, 0]}, y={group[0, 1]}")
|
146
146
|
|
147
|
-
print(group)
|
147
|
+
print(group)
|
148
148
|
|
149
149
|
```
|
4
d
test
CHANGED
@@ -126,11 +126,11 @@
|
|
126
126
|
|
127
127
|
# xy の値が変わるインデックスを調べる。
|
128
128
|
|
129
|
-
|
129
|
+
x_pos = np.nonzero(np.diff(points[:, 0]))[0] + 1
|
130
130
|
|
131
|
-
|
131
|
+
y_pos = np.nonzero(np.diff(points[:, 1]))[0] + 1
|
132
132
|
|
133
|
-
xy_pos = np.unique(np.concatenate([x_pos, y_pos]))
|
133
|
+
xy_pos = np.unique(np.concatenate([x_pos, y_pos]))
|
134
134
|
|
135
135
|
|
136
136
|
|
3
d
test
CHANGED
@@ -126,11 +126,11 @@
|
|
126
126
|
|
127
127
|
# xy の値が変わるインデックスを調べる。
|
128
128
|
|
129
|
-
(x_pos,) = np.nonzero(np.diff(points[:, 0]))
|
129
|
+
(x_pos,) = np.nonzero(np.diff(points[:, 0]))
|
130
130
|
|
131
|
-
(y_pos,) = np.nonzero(np.diff(points[:, 1]))
|
131
|
+
(y_pos,) = np.nonzero(np.diff(points[:, 1]))
|
132
132
|
|
133
|
-
xy_pos = np.unique(np.concatenate([x_pos, y_pos]))
|
133
|
+
xy_pos = np.unique(np.concatenate([x_pos, y_pos])) + 1
|
134
134
|
|
135
135
|
|
136
136
|
|
2
d
test
CHANGED
@@ -73,3 +73,77 @@
|
|
73
73
|
# [1 2 0]]
|
74
74
|
|
75
75
|
```
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
## 追記
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
for で回すのでもいいと思いますが、一応、別解も書いておきます。
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
1. [numpy.lexsort](https://docs.scipy.org/doc/numpy/reference/generated/numpy.lexsort.html) で点一覧を xyz 順にソートする。
|
88
|
+
|
89
|
+
1. `(x_pos,) = np.nonzero(np.diff(points[:, 0]))` で x 座標が変わるインデックスを調べる。
|
90
|
+
|
91
|
+
1. `(y_pos,) = np.nonzero(np.diff(points[:, 1]))` で y 座標が変わるインデックスを調べる。
|
92
|
+
|
93
|
+
1. `np.unique(np.concatenate([x_pos, y_pos]))` で x または y 座標が変わるインデックスを取得する。
|
94
|
+
|
95
|
+
1. x または y 座標が変わるインデックスの位置で点一覧を分割する。
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
```python
|
100
|
+
|
101
|
+
import numpy as np
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
np.random.seed(0)
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
points = np.random.randint(0, 10, (20, 3))
|
110
|
+
|
111
|
+
print(points)
|
112
|
+
|
113
|
+
xy = (1, 2) # xy 座標
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
# xyz 順でソートする。
|
118
|
+
|
119
|
+
ind = np.lexsort((points[:, 2], points[:, 1], points[:, 0]))
|
120
|
+
|
121
|
+
points = points[ind]
|
122
|
+
|
123
|
+
print(points)
|
124
|
+
|
125
|
+
|
126
|
+
|
127
|
+
# xy の値が変わるインデックスを調べる。
|
128
|
+
|
129
|
+
(x_pos,) = np.nonzero(np.diff(points[:, 0])) + 1
|
130
|
+
|
131
|
+
(y_pos,) = np.nonzero(np.diff(points[:, 1])) + 1
|
132
|
+
|
133
|
+
xy_pos = np.unique(np.concatenate([x_pos, y_pos]))
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
# xy の値が変わるインデックスで分割する。
|
138
|
+
|
139
|
+
split_points = np.split(points, xy_pos)
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
for group in split_points:
|
144
|
+
|
145
|
+
print(f"x={group[0, 0]}, y={group[0, 1]}")
|
146
|
+
|
147
|
+
print(group)
|
148
|
+
|
149
|
+
```
|
1
d
test
CHANGED
@@ -14,20 +14,62 @@
|
|
14
14
|
|
15
15
|
points = np.random.randint(0, 3, (20, 3))
|
16
16
|
|
17
|
+
print(points)
|
18
|
+
|
19
|
+
# [[0 1 0]
|
20
|
+
|
21
|
+
# [1 1 2]
|
22
|
+
|
23
|
+
# [0 2 0]
|
24
|
+
|
25
|
+
# [0 0 2]
|
26
|
+
|
27
|
+
# [1 2 2]
|
28
|
+
|
29
|
+
# [0 1 1]
|
30
|
+
|
31
|
+
# [1 1 0]
|
32
|
+
|
33
|
+
# [1 0 0]
|
34
|
+
|
35
|
+
# [1 2 0]
|
36
|
+
|
37
|
+
# [2 0 1]
|
38
|
+
|
39
|
+
# [1 2 0]
|
40
|
+
|
41
|
+
# [1 1 1]
|
42
|
+
|
43
|
+
# [0 2 0]
|
44
|
+
|
45
|
+
# [2 2 0]
|
46
|
+
|
47
|
+
# [2 0 0]
|
48
|
+
|
49
|
+
# [0 1 1]
|
50
|
+
|
51
|
+
# [2 0 0]
|
52
|
+
|
53
|
+
# [1 0 1]
|
54
|
+
|
55
|
+
# [2 2 0]
|
56
|
+
|
57
|
+
# [1 1 1]]
|
58
|
+
|
17
59
|
|
18
60
|
|
19
61
|
xy = (1, 2) # xy 座標
|
20
62
|
|
21
63
|
|
22
64
|
|
23
|
-
|
65
|
+
|
24
66
|
|
25
67
|
print(points[(points[:, 0] == xy[0]) & (points[:, 1] == xy[1])])
|
26
68
|
|
27
|
-
[[1 2 2]
|
69
|
+
# [[1 2 2]
|
28
70
|
|
29
|
-
[1 2 0]
|
71
|
+
# [1 2 0]
|
30
72
|
|
31
|
-
[1 2 0]]
|
73
|
+
# [1 2 0]]
|
32
74
|
|
33
75
|
```
|