행렬 객체에 대해서 파이썬 인덱싱과 슬라이싱도 사용할 수 있다. 주의할 점은 수학의 행렬은 1행, 1열부터 시작하지만 Matrix객체는 인덱스가 0으로 부터 시작한다는 점이다. 따라서 첫 번째 행(열)의 인덱스는 0이고 두 번째 행(열)의 인덱스는 1이다.
>>> M = Matrix(2, 3, [1,2,3,4,5,6])>>> M[1 2 3][4 5 6]>>> M[4] # 5>>> M[1,2] # 6>>> M[0,0] # 1>>> M[1,1] # 5>>> M[0:2, 0:2] # 2x2 부분 행렬>>> M[1:2, 2]>>> M[:,2] # 3열 전체 |
특정한 행이나 열을 뽑아내고 싶다면 row(n), col(n) 멤버 함수를 이용한다.
>>> M.row(0)>>> M.col(2)>>> M.row(-1) # 마지막 행을 뽑아낸다. |
행렬 M의 복사본을 생성하고 싶다면 다음과 같이 하면 된다.
>>> M2 = M[:,:]>>> M2[0,0]=100>>> M |
이와 같이 M2를 변경해도 M에는 영향을 미치지 않는다.
>>> M = Matrix(4,4,range(1,17))⎡1 2 3 4 ⎤⎢5 6 7 8 ⎥⎢9 10 11 12⎥⎣13 14 15 16⎦>>> M[2,2] = M[0,3] = 0>>> M⎡1 2 3 0 ⎤⎢5 6 7 8 ⎥⎢9 10 0 12⎥⎣13 14 15 16⎦>>> M[2:, 2:] = zeros(2,2)>>> M⎡1 2 3 4⎤⎢5 6 7 8⎥⎢9 10 0 0⎥⎣13 14 0 0⎦ |
행렬의 특정 행이나 열을 삭제하고 싶을 경우는 row_del(), col_del() 멤버함수를 이용하면 된다.
>>> M.row_del(0) # 첫 번째 행을 삭제한다.>>> M.col_del(1) # 첫 번째 열을 삭제한다. |
반대로 특정한 행이나 열을 끼워 넣고 싶다면 row_insert(n), col_insert(n) 을 이용한다. 이 경우 기존 행렬의 요소들을 밀어내고 그 위치에 입력한 행이나 열을 끼워 넣게 된다.
그리고 A.row_join(B) 는 A행렬의 오른편에 B행렬을 병합시키고 A.col_join(B)는 A행렬의 하단에 B행렬을 병합시킨다.
>>> A=eye(3)>>> A⎡1 0 0⎤⎢0 1 0⎥⎣0 0 1⎦>>> B=Matrix(3,2,range(11,17))>>> B⎡11 12⎤⎢13 14⎥⎣15 16⎦>>> A.row_join(B)⎡1 0 0 11 12⎤⎢0 1 0 13 14⎥⎣0 0 1 15 16⎦>>> A.col_join(B.T)⎡1 0 0 ⎤⎢0 1 0 ⎥⎢0 0 1 ⎥⎢11 13 15⎥⎣12 14 16⎦ |
또한 행렬객체의 메쏘드 중에 extract()라는 함수가 있다. 이것을 이용해서 원하는 부분을 뽑아낼 수 있다.
>>> A.extract(rowsList, colsList) |
예를 들면 다음과 같다.
>>> M=Matrix(4,3,range(12))>>> M⎡0 1 2 ⎤⎢3 4 5 ⎥⎢6 7 8 ⎥⎣9 10 11⎦>>> M.extract([0,1,3],[0,1])⎡0 1 ⎤⎢3 4 ⎥⎣9 10⎦ |
이 예를 보면 [0행, 1행, 3행] 과 [0열, 1열]이 겹치는 부부만 뽑아져 나온 것을 알 수 있다. 해당 행과 열에 선을 그어서 선이 겹치는 부분을 확인해 보면 쉽게 이해할 수 있을 것이다.
'프로그래밍언어.Lib > sympy' 카테고리의 다른 글
심파이(sympy) 선형대수 4 : 선형대수 연산 (1) | 2015.06.03 |
---|---|
심파이(sympy) 선형 대수 3 : 행렬의 연산 (0) | 2015.06.03 |
심파이(sympy) 실행 환경 (0) | 2015.06.03 |
심파이(sympy) 선형대수 1 : 행렬의 생성 (0) | 2015.04.30 |
심파이에서 기정의된 상수들 (0) | 2015.04.22 |