해결 방법: 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로 변환할 수 없습니다.