English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 예제에서는 두 가지 다른 방법으로 마트릭스 곱을 배웁니다: 내장된 루프와 내장된 목록 이해
이 예제를 이해하려면 다음을 이해해야 합니다:Python 프로그래밍주제:
Python에서는 마트릭스를 내장된 목록(목록 내의 목록)으로 구현할 수 있습니다.
각 요소를 마트릭스의 한 행으로 간주할 수 있습니다.
예를 들어 X = [[1, 2], [4, 5], [3, 6]]은 마트릭스를 나타냅니다.3x2마트릭스.
첫 번째 행은 X[0]로 선택할 수 있습니다. 또한, 첫 번째 행 첫 번째 열의 요소를 X[0][0]로 선택할 수 있습니다.
X의 열 수가 Y의 행 수와 일치할 때만 두 마트릭스 X와 Y의 곱을 정의합니다.
X가 n X m 행렬이고 Y가 m X l 행렬이면, XY는 정의되며, 그 차원은 n X l입니다(하지만 YX는 정의되지 않습니다). 파이썬에서 행렬 곱셈을 구현하는 몇 가지 방법이 있습니다.
# 프로그램은 두 행렬을 곱하기 위해 내장된 루프를 사용합니다 # 3x3 행렬 X = [[12,7,3], [4 ,5,6], [7 ,8,9] # 3x4 행렬 Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1] # 结果是 3x4 result = [[0,0,0,0], [0,0,0,0], [0,0,0,0]] # X 행을 순회합니다 for i in range(len(X)): # Y 열을 순회합니다 for j in range(len(Y[0])): # Y 행을 순회합니다 for k in range(len(Y)): result[i][j] += X[i][k] * Y[k][j] for r in result: print(r)
출력 결과
[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]
이 프로그램에서는 각 행과 열을 순회하는 데 사용된 내장된 for 루프를 사용했습니다. 결과에 제곱의 합을 누적합니다.
이 기술은 매우 간단하지만, 행렬의 차원을 증가시키면 계산량이 크게 증가합니다.
대형 행렬 작업을 위해, 최적화된 소프트웨어 패키지를 사용하는 것이 좋습니다. 예를 들어NumPy,그것은 위의 코드보다 몇 배 빠르게 작동합니다(대략1000배)。
# 프로그램은 두 행렬을 곱하기 위해 리스트 이해를 사용합니다 # 3x3 행렬 X = [[12,7,3], [4 ,5,6], [7 ,8,9] # 3x4 행렬 Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1] # 结果是 3x4 result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X] for r in result: print(r)
이 프로그램의 출력은 위와 같습니다. 위의 코드를 이해하기 위해, 먼저 내장 함수 zip()과 사용해야 할 것을 이해해야 합니다.*연산자는 매개변수 목록을 해제합니다.
우리는 바로 순회할 수 있는 내장된 리스트를 사용하여 행렬의 각 요소를 순회합니다. 이 코드는 원래는 복잡하고 읽기 어렵게 보이지만, 리스트 이해의 기술을 익히면 내장된 루프를 사용하지 않고도 될 수 있습니다.