English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Python 기본 강의

Python 흐름 제어

Python 함수

Python 데이터 타입

Python 파일 작업

Python 객체와 클래스

Python 날짜와 시간

Python 고급 지식

Python 참조 매뉴얼

Python 프로그램이 두 마트릭스를 곱합니다

파이썬 예제大全

이 예제에서는 두 가지 다른 방법으로 마트릭스 곱을 배웁니다: 내장된 루프와 내장된 목록 이해

이 예제를 이해하려면 다음을 이해해야 합니다: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()과 사용해야 할 것을 이해해야 합니다.*연산자는 매개변수 목록을 해제합니다.

우리는 바로 순회할 수 있는 내장된 리스트를 사용하여 행렬의 각 요소를 순회합니다. 이 코드는 원래는 복잡하고 읽기 어렵게 보이지만, 리스트 이해의 기술을 익히면 내장된 루프를 사용하지 않고도 될 수 있습니다.

파이썬 예제大全