Numpy 의 특징
- 수학,과학 계산을 위한 라이브러리이다. 행렬 및 배열을 처리하거나 연산한다. random.rand 난수를 생성할 수 있다.
행렬 생성
1 2 3 4 5 6 import numpy as np # numpy 패키지를 로드하여 np 라는 이름으로 사용 a = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.float64) # 2차원 행렬 생성 b = np.array([1,2,3]) # 1차원 행렬 생성 print(a) print(b)
1 2 3 4 5[[ 1. 2.5 3. ] [-1. -2. -1.5] [ 4. 5.5 6. ]] [7 5 3]
shape method
- $n \times n$ 행렬을 (rows, columns) 형태의 tuple 자료형으로 반환 해준다.
1 2 print(a.shape) # tuple 자료형으로 반환 print(b.shape) # (3,) 으로 나온다. 1 Dimensional 벡터라고 생각하면 된다.
1 2(3, 3) (3,)
complex matrix
1 2 3 4 5 c = np.array([[1 - 2j , 3 + 1j, 1], [1+2j, 2-1j, 7]]) ## j 앞엔 무조건 숫자가 와야한다. d = np.array([1+8j, -2j]) print(c) print(d)
1 2 3 4[[1.-2.j 3.+1.j 1.+0.j] [1.+2.j 2.-1.j 7.+0.j]] [ 1.+8.j -0.-2.j]
Data Type : dtype
보통 numpy 에서 실수부분은 np.float64, 허수부분은 np.complex128 의 데이터 타입을 사용한다.
실수 행렬 a에 허수를 대입하면 에러 발생
1 a[1,1] = 0 + 2j
1TypeError: can't convert complex to float
- 따라서 명시적으로 array 를 만들 때 dtype 을 정해주자.
- 그리고 complex type 으로 생성하면 실수,허수 둘 다 사용이 가능하다.
1 2 a = np.array([[1, 2.5, 3], [-1, -2, -1.5], [4, 5.5, 6]], dtype=np.float64) ## dtype 이 default 매개변수로 생략되어 있었기 때문 a = np.array([[1, 2.5, 3], [-1, -2, -1.5], [4, 5.5, 6]], dtype=np.complex128) ## 애초에 complex 타입으로 하면 실수,허수 둘다 사용가능
1 2 3 4 5 # 명시적 타입 캐스팅 a.astype(dtype=np.complex128) # 암묵적 타입 캐스팅 a = a + b # a:complex, b:float -> a:complex
파일(.txt) 읽기
# "Save/input1.txt" 내용 1.0 2.5 3.0 -1.0 -2.0 -1.5 4.0 5.0 6.0 # "Save/input2.txt" # complex 수식은 괄호안에 넣어서 처리 해준다. (1-2j) (3+j) (1) (1+2j) (2-j) 7
1 2 3 4 5 6 7 8 9 a = np.genfromtxt("Save/input1.txt", delimiter=" ", dtype=np.float64) # path, 구분자(공백, "," ...) , 데이터 타입 print(a) print(a.shape) b = np.genfromtxt("Save/input2.txt", delimeter=" ", dtype=np.complex128) print(b) print(b.shape)
1 2 3 4 5 6 7 8 9 10 11[[ 1. 2.5 3. ] [-1. -2. -1.5] [ 4. 5. 6. ]] (3, 3) [[1.-2.j 3.+1.j 1.+0.j] [1.+2.j 2.-1.j 7.+0.j]] (2, 3)
파일(.txt) 저장
- floating 포맷
123.4567 => “%0.4f”
- scientific 포맷
1.23e2 => “%0.2e”
1 2 3 4 5 6 7 d = np.genfromtxt("Save/input2.txt", delimiter=" ", dtype=np.complex128) np.savetxt("Save/output.txt", d , fmt="%0.4e", delimiter="," ) # 저장할 경로, 저장할 행렬, 포맷, 구분자 순서이다. d = np.genfromtxt("Save/output.txt" , delimiter=",", dtype=np.complex128) print(d)
1 2[[1.-2.j 3.+1.j 1.+0.j] [1.+2.j 2.-1.j 7.+0.j]]