심파이(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 를 이용하면 된다.
댓글 없음:
댓글 쓰기