NumPy에서는 1차원 배열은 모양(R, 1)(숫자 목록) 또는 모양의 두 가지 방법으로 표현될 수 있습니다. (R,) (목록의 목록). 두 모양 모두 동일한 기본 데이터를 나타내지만 행렬 곱셈에 대해 서로 다른 의미를 갖습니다.
두 행렬을 곱할 때 해당 모양이 호환되어야 합니다. 한 행렬의 모양이 (R, 1)이고 다른 행렬의 모양이 (R,)인 경우 모양이 정렬되지 않았기 때문에 NumPy에서 오류가 발생합니다. (R, 1)은 2차원 도형이고 (R,)은 1차원 도형이기 때문입니다.
이 오류를 해결하려면 행렬 중 하나의 형태를 명시적으로 변경하면 됩니다. 예:
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot(M[:,0].reshape((M.shape[0], 1)), ones)
이 예에서는 reshape() 메서드를 사용하여 M의 첫 번째 열(모양 (R,))을 모양 (R, 1)으로 변경합니다. 이렇게 하면 두 행렬의 모양이 호환되며 곱셈이 성공적으로 수행될 수 있습니다.
예, 명시적으로 형태를 변경하지 않고 위의 예를 수행하는 더 좋은 방법이 있습니다. 한 가지 방법은 축 인수와 함께 sum() 메서드를 사용하는 것입니다. 예:
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot(M[:,0], ones) + M[:,1:]
이 예에서는 sum() 메서드를 사용하여 M의 첫 번째 열과 나머지 열을 합합니다. 이를 통해 M과 동일한 형태의 행렬이 생성됩니다. 그러면 오류 없이 곱셈을 수행할 수 있습니다.
명시적으로 형태를 변경하지 않고 위의 예를 수행하는 또 다른 방법은 Broadcast() 함수를 사용하는 것입니다. 예:
import numpy as np M = np.array([[1, 2, 3], [4, 5, 6]]) ones = np.ones((M.shape[0], 1)) result = np.dot( np.broadcast_to(M[:,0], M.shape), ones)
이 예에서는 Broadcast() 함수를 사용하여 M의 첫 번째 열을 M의 모양으로 브로드캐스트합니다. 이렇게 하면 두 행렬의 모양이 호환되며 곱셈이 가능해집니다. 성공적으로 수행하겠습니다.
위 내용은 NumPy의 (R, 1)과 (R,) 모양의 차이점은 무엇이며 행렬 곱셈 문제는 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!