Hits



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
1
TypeError: 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]]