IT/Python

Numpy(넘파이) - 파이썬을 활용한 데이터 분석 기초 #2

디지털 은행원 이야기 2022. 9. 19. 21:33
반응형

 

NumPy Logo

안녕하세요.

이번글에서는 넘파이에서 배열과 관련된 기초적인 내용을 학습해보겠습니다.

 

#1 배열의 기초

먼저 배열의 기초에 관해 코드로 한번 확인해보겠습니다.

x2 = np.random.randint(10, size=(3,4))
# array([[2, 2, 9, 0],
#	[4, 2, 1, 0],
#      [1, 8, 7, 3]])

x2.ndim
# 2
x2.shape
# (3, 4)
x2.size
# 12
x2.dtype
# dtype('int64')

먼저 3, 4 크기의 배열 x2를 생성하였습니다.

ndim 은 배열의 차원을 확인하는 것이고 shape 는 배열의 모양, size는 배열에 몇개의 데이터가 들어있는지

그리고 마지막으로 dtype은 데이터 타입을 확인하는 명령어입니다.

 

# 배열안의 원소 찾기 및 잘라내기

x = np.arange(7)
# x = [0, 1, 2, 3, 4, 5, 6]

x[3]
# 3
x[7]
# IndexError: index 7 is out of bounds
x[0] = 10
# array([10, 1, 2, 3, 4, 5, 6])

# Slicing : Index 값으로 배열의 부분을 가져오는 것으로
#			start 값은 포함, end 값은 미포함하여 값을 return 합니다.
x[1:4]
# array([1, 2, 3])

x[1:]
# array([1, 2, 3, 4, 5, 6])
# 1을 포함하고 끝까지 출력

x[:4]
# array([0, 1, 2, 3])
# 4미만의 데이터 출력

x[::2]
# array([0, 2, 4, 6])
# 2개씩 띄워서 출력

x를 arange를 통해 배열로 선언하면 0 ~ 6까지의 값이 들어갑니다.

그리고 여러가지 테스트 케이스를 통해 배열안의 원소를 출력해보았습니다.

배열의 크기를 넘어서는 값을 출력하려고 하면

Java에서 발생하는 Index out of bounds Exception과 비슷한 Error가 발생하네요.

 

확실히 배열의 값을 잘라내거나 출력하는것만 봐도 Java보단 훨씬 직관적이고 사용하기 쉬워 보입니다.

언어마다의 장단점은 있겠지만 파이썬을 많이 사용하는 이유를 알 것 같습니다.

 

다음으로는 reshape 와 concatenate 라는 함수에 관해 알아보겠습니다.

### 배열의 차원 재정의
# reshape : 배열의 차원을 재정의할 수 있다.

x = np.arange(8)
# x = [0, 1, 2, 3, 4, 5, 6, 7]

x.shape
# (8,) --> x가 8개의 원소를 가진 배열을 뜻함

x2 = x.reshape((2, 4))
# array([[0, 1, 2, 3],
#	  [4, 5, 6, 7]])

x2.shape
# (2, 4)

### 이어 붙이기 및 나누기
# concatenate : array를 이어 붙인다.

x = np.array([0, 1, 2])
y = np.array([3, 4, 5])
np.concatenate([x,y])
# array([0, 1, 2, 3, 4, 5])

# np.concatenate 는 axis 축을 기준으로 이어붙일 수 있다.

EX)
#	0 1		0 1
#	2 3		2 3
#    			0 1
#           		2 3

matrix = np.arange(4).reshape(2,2)
# arange(4)를 통해 0, 1, 2, 3의 배열을 만들고 reshape를 통해 2x2 형태로 변경
np.concatenate([matrix, matrix], axis=0)
# axis = 0 을 주게 되면 matrix 가 세로 방향으로 붙게 됨

#	0 1		0 1 0 1
#	2 3		2 3 2 3

np.concatenate([matrix, matrix], axis=1)
# axis = 1 을 주게 되면 matrix 가 가로 방향으로 붙게 됨

np.split : axis축을 기준으로 나눌 수 있다.

EX)
matrix = np.arange(16).reshape(4,4)
uppper, lower = np.split(matrix, [3], axis=0)

# 0  1  2  3		0 	1 	2 	3
# 4  5  6  7		4	5	6	7
# 8  9  10 11		8	9	10	11
# 12 13 14 15		---------------
#			12	13	14	15

# 위의 예처럼 matrix라는 배열을 [3]번째 행으로 split을 하면
# 12 13 14 15 행만 따로 나눠지는 것을 확인할 수 있다.

matrix = np.arange(16).reshape(4,4)
left, right = np.split(matrix, [3], axis=1)
# 이렇게하면 맨 오른쪽 열만 따로 나눠지는 것을 확인할 수 있다.

 

reshape 나 concatenate를 잘 활용한다면 유용하게 사용할 수 있을 것 같은데

추후에 조금 더 복잡한 예제를 풀때 어떻게 사용되는지 알아보고 내용을 추가할 수 있으면 추가해보도록 하겠습니다.

 

이상으로 넘파이 배열의 기초에 관해 알아봤습니다.

반응형