줄리아에서 서로 다른 크기의 벡터 성분 별로 연산하는 방법

줄리아에서 서로 다른 크기의 벡터 성분 별로 연산하는 방법

설명

julia> x = [1 2 3]
1×3 Matrix{Int64}:
 1  2  3

julia> y = [1 2 3 4]
1×4 Matrix{Int64}:
 1  2  3  4

julia> x .+ y
ERROR: DimensionMismatch

위와 같이 크기가 다른 두 벡터는 기본적으로 점별 연산을 할 수 없다. 이를 직접 구현하려면 이중 for 문을 써야하겠지만, 다행히도 다음과 같이 간단하게 계산할 수 있다. 하나를 행벡터, 하나를 열벡터로 주면 다음과 같이 성분별로 연산한 2차원 배열을 반환한다. 이는 매트랩이나 파이썬 넘파이에서도 가능하다.

크기가 달라도 오류가 나지않는 점에서 의도하지 않은 계산이 되는 것은 아닌지 주의가 필요하다.

julia> x' .+ y
3×4 Matrix{Int64}:
 2  3  4  5
 3  4  5  6
 4  5  6  7

julia> x' .* y
3×4 Matrix{Int64}:
 1  2  3   4
 2  4  6   8
 3  6  9  12

julia> x' ./ y
3×4 Matrix{Float64}:
 1.0  0.5  0.333333  0.25
 2.0  1.0  0.666667  0.5
 3.0  1.5  1.0       0.75

당연하게도 x' 대신 transpose(x)를 써도 가능하다.

환경

댓글