[アルゴリズム]マトリクスの加算



※この写真と投稿内容の問題は、ProgrammersのWebサイトから抜粋しています.

に質問

행렬의 덧셈은 
행과 열의 크기가 같은 두 행렬의 
같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 

2개의 행렬 arr1과 arr2를 입력받아, 
행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.

제한 조건 : 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

<입출력 >

arr1		|arr2		|return
[[1,2],[2,3]]	|[[3,4],[5,6]]	|[[4,6],[7,9]]
[[1],[2]]	|[[3],[4]]	|[[4],[6]]

ほどく


My Code

def solution(arr1, arr2):
    ls = []
    for i in range(len(arr1)) :
        answer = [arr1[i][k] + arr2[i][k] for k in range(len(arr1[i]))]
        ls.append(answer)
    return(ls)
筆者はlsの空リストを再作成し,for文で得られた値appendの方法を用いた.
同じ位置値を呼び出す方法については、len()関数で指定し、for文を使用してすべての位置を呼び出す.
これはリスト計算に慣れていない問題です.

説明する


(1)
def sumMatrix(A,B):
    answer = [[c + d for c, d in zip(a, b)] for a, b in zip(A,B)]
    return answer
実際、このコードを見て理解するのに少し時間がかかりました.
本当にきれいできれいなコードです.zip()関数の使用が印象的でした.
最初の繰り返し、すなわち一番外側のFor文で
2つの入力値の行列は、zip()によって組み合わせられ、各行列には同じ位置にある内部リストがある.
2回目の繰り返し、つまり一番奥のFor文で
1回目の反復では、zip()関数により、同じ位置にある内部要素をペアリングして計算する.
この問題によりzip関数に関する多くの知識を学び,複数の変数の特定の値をペアリングすることができる.👏👏
(2)
def sumMatrix(A,B):
    for i in range(len(A)) :
        for j in range(len(A[0])):
            A[i][j] += B[i][j] 
    return A
この解釈.
ダブルForゲートは上記の説明と同じです.
基準として、同じ位置にある2番目の行列係数の値は、1番目の行列係数を基準として+=に加算される.
標準の最初の行列係数を返す方法を用いた.