Hits



copy (deep copy)

  • np.copy : deep copy, 새로운 메모리 공간을 참조하여 할당
1
2
3
4
5
6
7
8
9
a = np.array([[1, 2.5, 3], [-1, -2, -1.5], [4, 5.5, 6]], dtype=np.float64)

b = a # swallow copy, 같은 메모리 공간을 참조한다.

a[0,0] = 0.0 # 이렇게 되면 a[0,0], b[0,0] 값이 모두 0으로 변한다.

b = np.copy(a) # deep copy, 값이 같은 행렬 또는 벡터가 깊은 복사됨 완전 별개의 메모리 공간

prt(a, fmt="%0.2f")



reshape (swallow copy)

  • np.reshape(matrix, number 또는 shape) : 입력한 matrix 를 원하는 1D vector, 2D matrix 형태로 바꿔서 swallow copy 를 진행한다.
  • 여기서 shape 는 tuple 형태의 자료형이다. (2,3) 이면 2x3 matrix
  • number 즉 숫자 하나만 입력하면 (3,) 1d vector 임
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a = np.array([[1, 2.5, 3], [-1, -2, -1.5], [4, 5.5, 6]], dtype=np.float64) 
# 2x3 으로 모든 entry 가 6개이다.

b = np.reshape(a, 6) # 1D array (vector) 가 된다.

print(b)

b = np.reshape(a, (3,2)) # 2D array (matrix) 가 된다. 여기서 3x2 = 6 이므로 entry 개수가 같다.
# 만약 entry 개수가 다르면 에러가 발생한다.

print(b)

# swallow copy 를 하고싶지 않다면
# copy 를 사용하여 deep copy 하면된다.
b = np.copy(np.reshape(a, (3,2))) 
1
2
3
4
5
[1, 2.5, 3, -1, -2, -1.5]

[[1, 2.5]
[3, -1]
[-2, -1.5]]



tril / triu

  • np.tril(matrix, band_id) : band_id 를 포함하여 lower 부분들을 deep copy 한다. lower triangular matrix
  • 여기서 band_id 는 default parameter 로 생략 가능
1
2
3
4
5
a = np.array([[1,2,3], [4,5,6], [7,8,9]], dtype=np.float64)

b = np.tril(a)

prt(b, "%0.2f", delimiter=" , ")
1
2
3
 1.00 ,  0.00 ,  0.00
 4.00 ,  5.00 ,  0.00
 7.00 ,  8.00 ,  9.00


  • np.triu(matrix, band_id) : band_id 를 포함하여 upper 부분을 deep copy. upper triangular matrix
1
2
3
4
5
a = np.array([[1,2,3], [4,5,6], [7,8,9]], dtype=np.float64)

b = np.triu(a)

prt(b, "%0.2f", delimiter=" , ")
1
2
3
 1.00 ,  2.00 ,  3.00
 0.00 ,  5.00 ,  6.00
 0.00 ,  0.00 ,  9.00



diag

  • np.diag(matrix, k=band_id) : 특정 band 를 뽑아내어 1D array (vector) 로 만들어 swallow copy 하는 함수
1
2
3
4
5
6
7
8
a = np.array([[1,2,3], [4,5,6], [7,8,9]], dtype=np.float64)

b = np.diag(a, k=1)

prt(b, "%0.2f", delimiter=" , ")

b[0] = 0.0 # readonly 이기 때문에 에러 발생

1
 2.00 ,  6.00

Desktop View


입력에 따라 기능이 달라지는 np.diag

  • np.diag(matrix, k=band_id) 에서 matrix 에 1D array 를 입력하면 square matrix 를 deep copy 하여 반환 한다.
1
2
3
4
5
6
7
c = np.array([1,2,3,4] , dtype=np.float64) # 1차원 배열을 입력했을때

d = np.diag(c, k=-1) # deep copy 이다.

c[0] = 0.0

prt(d, "%0.2f", delimiter=" , ")
1
2
3
4
5
 0.00 ,  0.00 ,  0.00 ,  0.00 ,  0.00
 1.00 ,  0.00 ,  0.00 ,  0.00 ,  0.00
 0.00 ,  2.00 ,  0.00 ,  0.00 ,  0.00
 0.00 ,  0.00 ,  3.00 ,  0.00 ,  0.00
 0.00 ,  0.00 ,  0.00 ,  4.00 ,  0.00

Desktop View



diagflat

  • np.diagflat(M, k=band_id) : 항상 square matrix 를 deep copy 하여 만들어준다.
  • 주의할점은 여기서 입력되는 M을 1D array 화 시킨 뒤에 square matrix를 생성한다.
  • 1d array -> np.diag 와 비슷, 2d array -> 1d 화 한뒤에 square matrix 생성
1
2
3
4
5
M = np.array([[1,3],[2,4]], dtype=np.float64)

e = np.diagflat(M, k = 0)

prt(e, "%0.2f", delimiter=" , ")
1
2
3
4
 1.00 ,  0.00 ,  0.00 ,  0.00
 0.00 ,  3.00 ,  0.00 ,  0.00
 0.00 ,  0.00 ,  2.00 ,  0.00
 0.00 ,  0.00 ,  0.00 ,  4.00

Desktop View Desktop View



trace

  • np.trace : diagonal entry 혹은 band entry 들을 더한 값을 반환한다.
1
2
3
4
5
6
7
8
9
10
T = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.float64)

val = np.trace(T)

print(val)

val = np.trace(T, offset=-1)  # k 가 아니라 offset 임

print(val)
1
2
3
15

12

Desktop View



flatten method / ravel

  • flatten : 행렬 A 를 1D array 화 하여 deep copy 하여 반환한다.
1
2
3
4
5
T = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.float64)

flat = T.flatten()

prt(flat, "%0.2f", delimiter=" , ")
1
1.00 ,  2.00 ,  3.00 ,  4.00 ,  5.00 ,  6.00 ,  7.00 ,  8.00 ,  9.00


  • np.ravel : 행렬 A 를 1D array 화 하여 swallow copy 하여 반환
1
2
3
4
5
6
7
T = np.array([[1,2,3],[4,5,6],[7,8,9]], dtype=np.float64)

rav = np.ravel(T)

T[0,0] = 0.0

prt(rav, "%0.2f", delimiter=" , ")
1
 0.00 ,  2.00 ,  3.00 ,  4.00 ,  5.00 ,  6.00 ,  7.00 ,  8.00 ,  9.00