スマートか微妙ですが・・:
python
1def expand(matrix):
2 expand_width = len(matrix[0]) + 2
3 expand_height = len(matrix) + 2
4 matrix = [[0, *row, 0] for row in matrix]
5 matrix.insert(expand_height, [0] * expand_width)
6 matrix.insert(0, [0] * expand_width)
7 return matrix
8
9
10def sum_around(expanded_matrix):
11 width = len(expanded_matrix[0]) - 2
12 height = len(expanded_matrix) - 2
13 return [
14 [
15 expanded_matrix[index_h][index_w + 1]
16 + expanded_matrix[index_h + 1][index_w]
17 + expanded_matrix[index_h + 2][index_w + 1]
18 + expanded_matrix[index_h + 1][index_w + 2]
19 for index_w in range(width)
20 ] for index_h in range(height)
21 ]
22
23
24matrix = [[0, 1, 2, 3],[4, 5, 6, 7],[8, 9, 10, 11]]
25
26expanded_matrix = expand(matrix)
27print(expanded_matrix)
28answer = sum_around(expanded_matrix)
29print(answer)
実行結果:
console
1$ python test.py
2[[0, 0, 0, 0, 0, 0], [0, 0, 1, 2, 3, 0], [0, 4, 5, 6, 7, 0], [0, 8, 9, 10, 11, 0], [0, 0, 0, 0, 0, 0]]
3[[5, 7, 10, 9], [13, 20, 24, 20], [13, 23, 26, 17]]
numpy 使いがもっとスマートに解決しに来てくれるかも・・
あと、内包表記を 2 つ以上重ねると
読みにくくなるので良くないとする宗派もあったと記憶しています
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/31 02:58