python numpy ValueError : 피연산자를 셰이프와 함께 브로드 캐스트 할 수 없습니다.
numpy에는 두 개의 "배열"이 있으며 X
is (m,n)
and y
is a vector(n,1)
사용
X*y
오류가 발생합니다
ValueError: operands could not be broadcast together with shapes (97,2) (2,1)
시는 (97,2)x(2,1)
명확하게 법적 매트릭스 작업을하고 나에게 주어야한다 (97,1)
벡터
편집하다:
나는 이것을 사용하여 수정 X.dot(y)
했지만 원래의 질문은 여전히 남아 있습니다.
dot
행렬 곱셈이지만 *
다른 일을합니다.
두 개의 배열이 있습니다.
X
, 모양 (97,2)y
, 모양 (2,1)
Numpy 배열을 사용하면
X * y
요소별로 수행되지만 값 중 하나 또는 둘 모두를 하나 이상의 차원으로 확장하여 호환되도록 할 수 있습니다. 이 작업을 브로드 캐스팅이라고합니다. 크기가 1이거나 누락 된 치수는 방송에 사용할 수 있습니다.
위의 예에서 치수는 다음과 같은 이유로 호환되지 않습니다.
97 2
2 1
여기에 첫 번째 차원 (97과 2)에 충돌하는 숫자가 있습니다. 그것이 위의 ValueError가 불평하는 것입니다. 두 번째 차원은 1 번이 어떤 것과도 충돌하지 않기 때문에 괜찮습니다.
브로드 캐스팅 규칙에 대한 자세한 정보 : http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
( X
및 y
유형 numpy.matrix
이이면 별표를 행렬 곱셈으로 사용할 수 있습니다. 내 권장 사항은를 멀리 numpy.matrix
하는 것입니다. 단순화하는 것보다 더 복잡 해지는 경향이 있습니다.)
당신의 배열은 괜찮을 것입니다 numpy.dot
; 에서 오류가 발생 numpy.dot
하면 다른 버그가 있어야합니다. 에 대한 모양이 잘못된 경우 numpy.dot
다른 예외가 발생합니다.
ValueError: matrices are not aligned
이 오류가 계속 발생하면 문제에 대한 최소한의 예를 게시하십시오. 당신의 것과 같은 형태의 배열을 사용한 곱셈의 예는 성공합니다 :
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
데이터 분석을위한 Wes McKinney의 Python
방송 규칙 : 각 후행 차원 (즉, 끝에서 시작)에 대해 축 길이가 일치하거나 길이 중 하나가 1 인 경우 두 개의 배열이 방송용으로 호환됩니다 . 그런 다음 누락 및 / 또는 길이 1에 대해 방송이 수행됩니다. 치수.
즉, 당신이 (선형 대수학 의미에서) 곱셈이 행렬에 시도하는 경우에 당신은 원하는 X.dot(y)
하지만 매트릭스에서 방송 스칼라하려고하는 경우 y
에 X
당신은 수행해야합니다 X * y.T
.
예:
>>> import numpy as np
>>>
>>> X = np.arange(8).reshape(4, 2)
>>> y = np.arange(2).reshape(1, 2) # create a 1x2 matrix
>>> X * y
array([[0,1],
[0,3],
[0,5],
[0,7]])
It's possible that the error didn't occur in the dot product, but after. For example try this
a = np.random.randn(12,1)
b = np.random.randn(1,5)
c = np.random.randn(5,12)
d = np.dot(a,b) * c
np.dot(a,b) will be fine; however np.dot(a, b) * c is clearly wrong (12x1 X 1x5 = 12x5 which cannot element-wise multiply 5x12) but numpy will give you
ValueError: operands could not be broadcast together with shapes (12,1) (1,5)
The error is misleading; however there is an issue on that line.
Use np.mat(x) * np.mat(y), that'll work.
'IT story' 카테고리의 다른 글
매크로 정의의 pragma (0) | 2020.08.30 |
---|---|
Paramorphism은 무엇입니까? (0) | 2020.08.30 |
Anaconda는 Python과 어떤 관련이 있습니까? (0) | 2020.08.30 |
조각 onCreateView 및 onActivityCreated가 두 번 호출 됨 (0) | 2020.08.30 |
데이터 바인딩 된 뷰에서 If-Else 구조를 템플릿하는 방법은 무엇입니까? (0) | 2020.08.30 |