본문 바로가기
Python/numpy

numpy ValueError: Array shape not aligned in matmul 오류 해결하기

by PySun 2024. 10. 11.
반응형

소개

NumPy를 사용하여 행렬을 곱하려고 할 때 'ValueError: shapes (x,y) and (z,w) not aligned: (x != z)'라는 오류가 발생할 수 있습니다. 이 오류는 행렬의 형태가 서로 맞지 않을 때 발생하며, 이는 종종 잘못된 모양의 배열을 사용하거나 행렬 곱셈에 대해 잘못된 차원을 제공할 때 일어납니다. 이번 블로그 글에서는 이 오류의 발생 원인과 해결 방법에 대해 알아보겠습니다.

에러 발생 예시 코드

먼저, 'ValueError'가 발생할 수 있는 간단한 예시 코드를 살펴보겠습니다.

import numpy as np

# 2x3 행렬 생성
A = np.array([[1, 2, 3],
              [4, 5, 6]])

# 2x2 행렬 생성
B = np.array([[1, 2],
              [3, 4]])

# 행렬 곱 수행
C = np.matmul(A, B)
print(C)

에러 해결 방법

1. 행렬의 차원 확인하기

행렬 곱셈을 수행하기 전에 두 행렬의 모양을 확인하는 것이 좋습니다. 행렬 A의 열 수는 행렬 B의 행 수와 같아야 합니다. 이를 확인하기 위해 shape 속성을 활용할 수 있습니다.

import numpy as np

# 2x3 행렬 생성
A = np.array([[1, 2, 3],
              [4, 5, 6]])

# 2x2 행렬 생성
B = np.array([[1, 2],
              [3, 4]])

# 행렬의 형태 확인
print("A의 형태:", A.shape)
print("B의 형태:", B.shape)

2. 행렬 모양 조정하기

행렬을 올바르게 곱하려면 행렬의 차원을 변경해야 합니다. 예를 들어, 아래 코드는 B를 전치(transpose)하여 A와 곱할 수 있도록 만듭니다.

import numpy as np

# 2x3 행렬 생성
A = np.array([[1, 2, 3],
              [4, 5, 6]])

# 3x2 행렬 생성 (전치된 형태)
B = np.array([[1, 3],
              [2, 4],
              [5, 6]])

# 행렬 곱 수행
C = np.matmul(A, B)
print("행렬 곱의 결과:\n", C)

마무리

이번 글에서는 NumPy의 행렬 곱셈에서 발생할 수 있는 'ValueError: shapes not aligned' 오류를 해결하기 위한 방법에 대해 알아보았습니다. 행렬의 차원을 확인하고 조정함으로써 이러한 오류를 피할 수 있습니다. NumPy를 사용할 때는 항상 배열의 크기와 차원에 주의하세요. 이를 통해 보다 원활한 작업 흐름을 유지할 수 있습니다.

반응형