본문 바로가기
python

(중요)15. numpy

by 장인이 2021. 1. 14.

  numpy는 계산을 위한 라이브러리로서, 다차원 배열을 처리하는데 필요한 여러 기능을 제공하는 패키지입니다. 다차원 배열을 강력하게 처리할 수 있어, 데이터 처리와 머신 러닝 등 많은 곳에서 사용하게 됩니다.

 

1. numpy로 바꾸기 위해서는 리스트를 np.array()로 감싸서 사용합니다.

a = np.array([1, 2, 3, 4])
print(a)
# 출력
# [1, 2, 3, 4]
print(a.shape)
# 출력
# (4, ) , 크기 나타냄

 

2. 2차원 배열을 형성할 수 있습니다. 아래 b행렬은 2행 3열의 행렬입니다.

b = np.array([[1,2,3],[4,5,6]])
print(b.shape)
# 출력
# (2, 3)
print(b[0][0])
# 출력
1

 

3. 특이한 특징을 지니는 numpy 배열을 만드는 함수들이 있습니다.

np.zeros((2,2)) # 2행 2열, 0을 가지고 있는 행렬을 만듬

np.ones((2,3)) # 2행 3열, 1을 가지고 있는 행렬을 만듬

np.full((2,3), 5) # 2행 3열, 뒤에 입력한 숫자를 가지고 있는 행렬을 만듬

np.eye(3) # 3행 3열, 대각선은 1이고 나머지는 0인 2차원 배열을 만듬

 

4. reshape()을 이용하여 배열을 다차원으로 변환시켜 줄 수 있습니다.

a = np.array(range(20)).reshape((4, 5))
print(a)
# 출력
# [[ 0   1   2   3   4]
#  [ 5   6   7   8   9]
#  [10  11  12  13  14]
#  [15  16  17  18  19]]

 

5. numpy 슬라이싱, 각 차원별로 슬라이스 범위를 지정하여 사용합니다.

arr = np.array(range(10)).reshape((3, 3))
a = arr[0:2, 0:2]
print(a)
# 출력
# [[1 2]
#  [4 5]]

a = arr[1:, 1:]
print(a)
# 출력
# [[5 6]
#  [8 9]]

 

6. numpy 인덱싱, 각 차원별로 선택되는 배열요소의 인덱스들을 일렬로 나열하여 부분집합을 구하는 것

a = np.array(range(1, 13)).reshape((3, 4))
s = a[[0, 2], [1, 3]]
print(s)
# 출력
# [2 12]

 

   또한, 같은 크기의 bool 타입 배열을 통한 인덱싱도 가능합니다.

a = np.array(range(1, 10).reshape((3, 3))
bool_array = np.array([
	[False, True, False],
	[True, False, True],
	[False, True, False]
])

n = a[bool_array]
print(n)
# 출력
# [2, 4, 6, 8]

# 또 다른 방법
bool_array = (a % 2 == 0)
print(a[bool_array])

# 요약하면
n = a[ a % 2 == 0 ]

# 출력
# [2. 4, 6, 8]

 

7. numpy 연산, numpy를 활용할 시, 배열간의 연산을 쉽게 할 수 있습니다.

  +, -, *, / 뿐만 아니라, add(), substract(), multiply(), divide()등의 함수도 사용 가능합니다.

a = np.array([1,2,3])
b = np.array([4,5,6])
c = a + b
# c = np.add(a, b)
print(c)
# 출력
# [5, 7, 9]

 

  행렬과 행렬의 곱 연산을 위해서는 dot()함수를 사용하면 됩니다.

a = np.array(range(1, 5)).reshape((2, 2))
b = np.array(range(5, 9)).reshape((2, 2))

c = np.dot(a, b)
print(c)
# 출력
# [[19 22]
#  [43 50]]

 

  배열 간의 연산을 위한 sum(), prod() 함수가 있습니다. sum()은 각 배열의 요소를 더하는 것이고, prod()는 각 배열 요소를 곱하는 것입니다. 여기서 옵션으로 axis 값을 지정 가능하며, axis가 1이면 행끼리 연산, 0이면 열끼리 연산하는 것입니다.

a = np.array([[1,2],[3,4]])

print(np.sum(a)) # 10
print(np.sum(a, axis=0) # [4 6]
print(np.sum(a, axis=1) # [3 7]
print(np.prod(a)) # 24

 

8. numpy에서 파일 읽기/쓰기, savetxt()loadtxt()을 통해여 저장 및 불러올 수 있습니다.

# 형식
# numpy.savetxt({저장할 파일 이름}, {저장할 데이터},
#				fmt={데이터 형식(소수점 몇자리까지 같은 거)}, delimiter={데이터 간 구분자})

# 예시
np.savetxt("test.txt", numbers, fmt="%d", delimiter=",")

 

댓글