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

回答編集履歴

3

追記

2017/10/10 08:07

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -38,4 +38,31 @@
38
38
 
39
39
  a = [[0,1,1],[2,2,5],[2,1,3]]
40
40
  print(argmax_2dim(a))
41
+ ```
42
+
43
+ 皆さん『複数最大値がある場合』について言及されているので、便乗してみる。
44
+ ```Python
45
+ def flatten_2dim(array):
46
+ return [item for sublist in array for item in sublist]
47
+
48
+ def all_argmax_2dim(array):
49
+ flat_array = flatten_2dim(array)
50
+
51
+ row_num = len(array)
52
+ max_value = max(flat_array)
53
+
54
+ for i, elem in enumerate(flat_array):
55
+ if elem == max_value:
56
+ yield i // row_num, i % row_num
57
+
58
+ a = [[0,5,5],[2,2,5],[5,1,3]]
59
+ for argmax in all_argmax_2dim(a):
60
+ print(argmax)
61
+
62
+ """出力
63
+ (0, 1)
64
+ (0, 2)
65
+ (1, 2)
66
+ (2, 0)
67
+ """
41
68
  ```

2

こっそりバグ修正

2017/10/10 08:07

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -32,7 +32,7 @@
32
32
  flat_array = flatten_2dim(array)
33
33
 
34
34
  row_num = len(array)
35
- max_index = max(flat_array)
35
+ max_index = flat_array.index(max(flat_array))
36
36
 
37
37
  return max_index // row_num, max_index % row_num
38
38
 

1

追記

2017/10/10 08:02

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -20,4 +20,22 @@
20
20
  """
21
21
  ```
22
22
 
23
- ラムダ式がわかるならそのまま使った方が簡潔でしょう。
23
+ ラムダ式がわかるならそのまま使った方が簡潔でしょう。
24
+
25
+ ---
26
+ どうしてもnumpyを使いたくない場合。
27
+ ```Python
28
+ def flatten_2dim(array):
29
+ return [item for sublist in array for item in sublist]
30
+
31
+ def argmax_2dim(array):
32
+ flat_array = flatten_2dim(array)
33
+
34
+ row_num = len(array)
35
+ max_index = max(flat_array)
36
+
37
+ return max_index // row_num, max_index % row_num
38
+
39
+ a = [[0,1,1],[2,2,5],[2,1,3]]
40
+ print(argmax_2dim(a))
41
+ ```