해결 방법: valueerror: 피연산자를 모양과 함께 브로드캐스트할 수 없습니다.


Python을 사용할 때 발생할 수 있는 오류는 다음과 같습니다.

 ValueError : operands could not be broadcast together with shapes (2,2) (2,3) 

이 오류는 Python에서 numpy.dot() 함수 대신 곱셈 기호( * )를 사용하여 행렬 곱셈을 수행하려고 할 때 발생합니다.

다음 예에서는 각 시나리오에서 이 오류를 수정하는 방법을 보여줍니다.

오류를 재현하는 방법

2개의 행과 2개의 열이 있는 2×2 행렬 C가 있다고 가정합니다.

2개의 행과 3개의 열이 있는 2×3 행렬 D도 있다고 가정합니다.

행렬 C와 행렬 D를 곱하는 방법은 다음과 같습니다.

그 결과 다음과 같은 행렬이 생성됩니다.

다음과 같이 곱셈 기호(*)를 사용하여 Python에서 이 행렬 곱셈을 수행한다고 가정해 보겠습니다.

 import numpy as np

#define matrices
C = np. array ([7, 5, 6, 3]). reshape (2, 2)
D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3)

#print dies
print (C)

[[7 5]
 [6 3]]

print (D)

[[2 1 4]
 [5 1 2]]

#attempt to multiply two matrices together
CD

ValueError: operands could not be broadcast together with shapes (2,2) (2,3)  

ValueError 가 발생합니다. NumPy 문서를 참조하여 이 오류가 발생한 이유를 이해할 수 있습니다.

두 개의 배열을 작업할 때 NumPy는 모양 요소를 요소별로 비교합니다. 끝 치수(즉, 가장 오른쪽)에서 시작하여 왼쪽으로 진행됩니다. 두 차원은 다음과 같은 경우에 호환됩니다.

  • 그들은 동등하거나
  • 그 중 하나는 1

이러한 조건이 충족되지 않으면 ValueError: Operands could not be Broadcast together 예외가 발생하여 배열에 호환되지 않는 모양이 있음을 나타냅니다.

두 행렬의 최종 차원 값이 동일하지 않기 때문에(행렬 C의 최종 차원은 2이고 행렬 D의 최종 차원은 3임) 오류가 발생합니다.

오류를 수정하는 방법

이 오류를 해결하는 가장 쉬운 방법은 numpy.dot() 함수를 사용하여 행렬 곱셈을 수행하는 것입니다.

 import numpy as np

#define matrices
C = np. array ([7, 5, 6, 3]). reshape (2, 2)
D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3)

#perform matrix multiplication
C. dowry (D)

array([[39, 12, 38],
       [27, 9, 30]])

ValueError를 방지하고 두 행렬을 성공적으로 곱하는 데 성공했습니다.

또한 결과는 이전에 수동으로 계산한 결과와 일치합니다.

추가 리소스

다음 튜토리얼에서는 Python의 다른 일반적인 오류를 수정하는 방법을 설명합니다.

수정방법: 열이 겹치는데 접미사가 지정되지 않음
수정 방법: ‘numpy.ndarray’ 개체에 ‘append’ 속성이 없습니다.
해결 방법: 모든 스칼라 값을 사용하는 경우 인덱스를 전달해야 합니다.
수정 방법: ValueError: float NaN을 int로 변환할 수 없습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다