BookmarkSubscribeRSS Feed

[SAS 프로그래밍] SAS/IML(interactive matrix language)로 행렬 연산하는 방법

Started ‎06-18-2020 by
Modified ‎06-18-2020 by
Views 363

 안녕하세요 이번시간에는 저번시간에 이어서 행렬언어인 SAS/IML에 대해 좀 더 알아보는 시간을 가지겠습니다저번시간에는 간단한 행렬을 만들고 행 또는 열을 추가 또는 크기를 바꾸는 법에 대해서 알아보았습니다이번시간에는 행렬연산을 하는 법에 대해 다뤄보겠습니다.

 

 

Matrix Operations

 

 우선기본적인 행렬계산인 상수를 곱하고 행렬끼리 더하는 방법은 다음과 같습니다. a라는 2x3 행렬이 있을 때 행렬에 3을 곱하고 b라는 2x3행렬을 더하는 과정을 나타내 보겠습니다.

 

다운로드 - 2020-06-18T130643.933.png

 

다운로드 - 2020-06-18T130644.925.png

 

행렬의 실수배를 하거나 행렬의 덧셈을 하는 경우 곱셈기호로는 ‘*’를 사용하고 덧셈이나 뺄셈은 ‘+’, ‘-‘를 사용하면 됩니다그리고 벡터의 내적과 같은 행렬의 곱을 앞 행렬의 열과 뒤 행렬의 행의 수가 같아야 하며 행렬의 실수배와 마찬가지로 곱셈기호 ‘*’를 사용합니다예를 들어 위에서 만든 2x3크기의 행렬 a에 3x1크기의 행렬을 곱하면 2x1크기의 행렬이 만들어집니다..

 

다운로드 - 2020-06-18T130646.732.png

 

다운로드 - 2020-06-18T130647.813.png

 

행렬 a 1행에 있는 1, 2, 3에 각각 행렬 c 1열의 각행의 수를 곱하여 1x1+2x2+3x3=14 2행에 있는 2, 3, 4에도 행렬 c 1열을 곱하여 1x2+2x3+3X4=20 이 계산된 것을 확인하였습니다.

 

 IML에서는 nxp 크기의 행렬에 대해 nx1 또는 1xp행렬로 사칙연산이 가능합니다예를 들어 nx3짜리 행렬이 있을 때 1x3행렬의 각 열의 세개의 값들이 nx3행렬의 각 열의 모든 행에 공통으로 작용하여 사칙연산을 수행하게 됩니다하지만곱하기의 경우 행렬의 곱(벡터의 내적)과 구분을 해야 하기 때문에 ‘*’기호 대신 ‘#’기호를 사용하면 됩니다마찬가지로 px1행렬의 p개의 값들이 nxp행렬의 각 행의 모든 열에 작용하여 사칙연산을 하게 됩니다. 2x3행렬과 3x2행렬에 대해 각각 1x3행렬과 3x1행렬로 사칙연산을 수행해보겠습니다.

 

다운로드 - 2020-06-18T130649.332.png

 

다운로드 - 2020-06-18T130650.420.png

 

우선 3x2행렬에 대해 3x1행렬로 연산을 한 결과입니다결과에서 보듯이 3x1행렬의 각 행의 값들이 3x2행렬의 각 행의 모든 열에 공통으로 적용되어 계산된 것을 확인할 수 있습니다.

 

다운로드 - 2020-06-18T130651.860.png

 

이번엔 행과 열을 바꿔서 2x3행렬에 대해 1x3행렬로 연산을 한 결과입니다. 1x3행렬의 각 열의 값들이 2x3행렬의 각 열의 모든 행에 공통으로 적용되어 계산된 것을 확인하였습니다.

 

뿐만 아니라 nxp 크기의 행렬A에 대해서 nxp 크기의 행렬또한 사칙연산이 가능합니다같은 nxp 크기의 행렬이기 때문에 행렬에 존재하는 성분의 수 또한 같을 것입니다그렇기 때문에 이러한 경우에는 A행렬의 각 성분마다 같은 위치에 있는 B행렬의 성분이 존재하고 그 두 성분끼리 연산을 수행하게 되는 것입니다. 2x3크기의 행렬을 예로 들어 성분 간의 곱하기와 더하기의 사칙연산이 수행된 결과를 보여드리겠습니다.

 

다운로드 - 2020-06-18T130653.004.png

 

다운로드 - 2020-06-18T130654.164.png

 

2x3크기의 행렬A에 대해 2x3크기의 행렬B로 연산을 수행한 결과입니다성분간 곱하기 연산을 수행한 AB_1행렬더하기는 AB_2행렬을 통해 연산이 의도한대로 이루어 진 것을 확인하였습니다.

 

 1x1크기의 행렬즉 스칼라 값이 행렬에 대해 연산이 이루어 질 때는 흔히 행렬의 모든 성분에 대해 실수 배를 할 때이지만 IML에서는 스칼라 값으로 nxp크기의 행렬에 대해 덧셈이나 뺄셈도 할 수가 있습니다실수 배를 할 때와 마찬가지로 스칼라 값 하나가 행렬의 모든 성분에 공통으로 연산작용을 하게 됩니다위에서 실습한 행렬A를 통해 확인해보겠습니다.

 

다운로드 - 2020-06-18T130655.476.png

 

다운로드 - 2020-06-18T130657.021.png

  

행렬A 1을 빼는 연산을 수행한 결과 행렬의 모든 성분에서 -1 의 연산이 수행된 것을 확인였습니다.

 

 

 

마치며

 

오늘은 IML을 통해 행렬 연산을 하는 법에 대해 알아보았습니다기본적인 행렬 연산인 행렬의 실수 배더하기빼기벡터의 내적 개념인 행렬 곱 외에도 nxp크기의 행렬에 대해 1x1, nx1, 1xp, nxp 네 종류의 크기를 가진 행렬로도 연산이 가능하다는 것을 알았습니다.

 

  

 

 Reference

 

https://support.sas.com/resources/papers/proceedings13/144-2013.pdf

 

 

Version history
Last update:
‎06-18-2020 01:09 AM
Updated by:
Contributors

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Article Labels
Article Tags