심파이(sympy)의 행렬 객체는 Matrix이다. 이 Matrix 객체를 생성할 때는 리스트를 넘겨주면 된다. 넘겨준 리스트의 각 요소는 행렬의 행이 된다. 기본적인 사용 예는 다음과 같다.
>>> Matrix([[1,0],[0,1]]) #[1,0]이 1행, [0,1]이 2행이 된다.>>> Matrix([[11, 22, 33]]) # 리스트의 첫 번째 요소인 [11,22,33]이 1행이 된다.>>> Matrix([11, 22, 33]) # 11이 1행, 22가 2행, 33이 3행이 된다. |
다른 방법으로 행의 개수와 열의 개수를 명시적으로 지정해 주는 방법이 있다.
>>> A = Matrix(2, 3, [1,2,3,4,5,6])⎡1 2 3⎤⎣4 5 6⎦>>> B = Matrix(4, 4, range(16))⎡0 1 2 3 ⎤⎢4 5 6 7 ⎥⎢8 9 10 11⎥⎣12 13 14 15⎦ |
행 요소와 열 요소의 관계를 파이썬 함수로 작성하여 이것을 사용할 수도 있다.
>>> def f(i,j):if i==j : return 1else : return 0>>> Matrix(4,4,f)⎡1 0 0 0⎤⎢0 1 0 0⎥⎢0 0 1 0⎥⎣0 0 0 1⎦ |
명시적 함수뿐만 아니라 익명 함수도 사용할 수도 있다.
>>> Matrix(3, 4, lambda i,j:1-(i+j)%2)⎡1 0 1 0⎤⎢0 1 0 1⎥⎣1 0 1 0⎦ |
특수한 행렬을 생성하는 함수도 있다. eye() 함수는 항등 행렬을 생성하며, zeros() 는 영행렬을 그리고 ones()는 일행렬을 만들어 준다.
>>> eye(4)>>> zeros(2)>>> ones(3)>>> ones(1,3) |
대각행렬을 생성하는 diag() 함수도 있다. 스칼라나 행렬을 인수로 주면 그것들로 대각행렬을 생성한다.
>>> diag(1,2,3)>>> diag(-1, ones(2,2), Matrix([5,7,6])) |
스칼라는 1x1 행렬로 간주되며 주어진 행렬들을 대각 위치에 놓는다.
난수 행렬을 발생시킬 수도 있으며 randMatrix() 함수를 이용한다.
>>> randMatrix(4) # 4x4 행렬 생성>>> randMatrix(3,4) # 3x4 행렬 생성>>> randMatrix(5, symmetric = True) # 5x5의 대칭행렬 생성 |
이 행렬의 요소는 100이하의 양의 정수로 채워진다.
[표 1] 행렬 객체의 생성 용례들
용법 | 내용 |
Martix(list) Matrix([list1, list2,...]) Matrix(r, c, seq) Matrix(r, c, func) | 열벡터 생성 행렬 생성 seq를 이용하여 r x c 행렬 생성 함수를 이용하여 r x c 행렬 생성 |
eye(n) | n x n 단위행렬 |
zeros(n) zeros(r, c) | n x n 영행렬 r x c 영행렬 |
ones(n) ones(r, c) | n x n 일행렬 r x c 일행렬 |
diag(arg1, arg2, ...) | args 요소들의 단위행렬 생성 |
randMatrix(n) randMatrix(r, c) | n x n 난수행렬 (대칭행렬은 symmetric=True 옵션을 지정) r x c 난수행렬 |
한 가지 주지할 사항은 Matrix 객체는 mutable 하다는 것이다. 따라서 immutability 가 필요한 곳(예를 들어 딕셔너리의 키)에는 사용할 수 없다. immutable행렬이 필요하다면 ImmutableMatrix 를 이용하면 된다.
'프로그래밍언어.Lib > sympy' 카테고리의 다른 글
심파이(sympy) 선형대수 2 : 행렬의 indexing/slicing (0) | 2015.06.03 |
---|---|
심파이(sympy) 실행 환경 (0) | 2015.06.03 |
심파이에서 기정의된 상수들 (0) | 2015.04.22 |
심파이(sympy)의 symbols() 함수 사용법 (1) | 2015.04.22 |
간단한 예제들로 심파이 맛보기 (0) | 2015.04.22 |