반응형
numpy 행렬 벡터 곱셈
이 질문에는 이미 답변이 있습니다.
두 개의 numpy 배열 크기 (nxn) * (nx 1)를 곱하면 크기 (nxn)의 행렬이 나타납니다. 일반적인 행렬 곱셈 규칙에 따라 (nx 1) 벡터가 예상되지만 Python의 Numpy 모듈에서 이것이 어떻게 수행되는지에 대한 정보를 찾을 수 없습니다.문제는 프로그램 속도를 유지하기 위해 수동으로 구현하고 싶지 않다는 것입니다.예제 코드는 다음과 같습니다.
a = np.array([[ 5, 1 ,3], [ 1, 1 ,1], [ 1, 2 ,1]])
b = np.array([1, 2, 3])
print a*b
>>
[[5 2 9]
[1 2 3]
[1 4 3]]
내가 원하는 것은 :
print a*b
>>
[16 6 8]
가장 간단한 솔루션
numpy.dot
또는을 사용하십시오
a.dot(b)
.
에서 설명서를 참조 하십시오 .
>>> a = np.array([[ 5, 1 ,3],
[ 1, 1 ,1],
[ 1, 2 ,1]])
>>> b = np.array([1, 2, 3])
>>> print a.dot(b)
array([16, 6, 8])
이것은 numpy 배열이 행렬이 아니고 표준 작업이
*, +, -, /
배열에서 요소별로 작동 하기 때문에 발생 합니다. 대신 사용하여 시도 할 수
및
*
행렬 곱셈과 같이 처리됩니다.
다른 솔루션
다른 옵션도 있습니다.
- 아래에서 언급했듯이 python3.5 이상을 사용하면
연산자가 예상대로 작동합니다.@
>>> print(a @ b) array([16, 6, 8])
- 과잉을 원하면을 사용할 수 있습니다
. 이 문서는 작동 방식에 대한 풍미를 제공하지만 솔직히이
읽고 내 자신 만 가지고 놀기 전까지는 사용법을 완전히 이해하지 못했습니다 .
>>> np.einsum('ji,i->j', a, b) array([16, 6, 8])
- 중반 2016 (NumPy와 1.10.1)의, 당신은 실험적인 시도 할 수 있습니다
처럼 작동,
두 가지 예외를 제외하고 : 어떤 스칼라 곱셈을하지만, 행렬 스택과 함께 작동합니다.numpy.dot
>>> np.matmul(a, b) array([16, 6, 8])
-
과 같은 방식으로 기능 하지만 행렬-행렬과 텐서 곱셈에서는 다르게 동작 일반적으로 내부 제품과 내적 곱 의 차이점에 대해서는 Wikipedia를 하거나 numpy의 구현에 대해서는 SO 답변 참조 ).numpy.dot
는 행렬-벡터 곱셈>>> np.inner(a, b) array([16, 6, 8]) # Beware using for matrix-matrix multiplication though! >>> b = a.T >>> np.dot(a, b) array([[35, 9, 10], [ 9, 3, 4], [10, 4, 6]]) >>> np.inner(a, b) array([[29, 12, 19], [ 7, 4, 5], [ 8, 5, 6]])
엣지 케이스를위한 더 큰 옵션
- 텐서가있는 경우 (차원의 배열이 1 이상인 경우)
선택적 인수와 함께 사용할 수 있습니다
.axes=1
>>> np.tensordot(a, b, axes=1) array([16, 6, 8])
-
행렬이 1D 배열로 평탄화되므로 복소수 행렬이있는 경우 사용하지 마십시오 . 평행 행렬과 벡터 사이의 복소수 복소수 곱을 찾으려고 시도합니다 (크기 불일치로 인해 실패합니다)
vsn*m
).n
참고URL : https://stackoverflow.com/questions/21562986/numpy-matrix-vector-multiplication
반응형
'Programming' 카테고리의 다른 글
배열의 중간을 계산할 때 start + (end-start) / 2 over (start + end) / 2를 선호하는 이유는 무엇입니까? (0) | 2020.06.03 |
---|---|
각 데이터 행에 대해 하나의 INSERT 문을 MySQLDump (0) | 2020.06.03 |
bash 변수가 0인지 확인하십시오 (0) | 2020.06.03 |
stdout으로 인쇄하는 것이 왜 그렇게 느립니까? (0) | 2020.06.03 |
힘내 : 추적 된 파일 무시 (0) | 2020.06.03 |