마스킹이란

원하는 조건을 달아서 조건에 맞는 배열요소들만 걸러내는 작업이다.

 

True/False를 반환하는 조건을 인덱스처럼 집어 넣으면 조건의 True 값을 반환하는 원소들만 뽑아낼 수 있다.

 

arrra2 = array[array > 3]

 

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[6 3 5 6]
 [2 3 4 3]
 [0 4 8 0]]

print(my_arr > 5)
# 결과 
[[ True False False  True]
 [False False False False]
 [False False  True False]]

mask_arr = my_arr[my_arr >5] 
# 결과
[6 6 8]

 

 

Numpy를 이용해서 만든 배열의 여러가지 특징들을 뽑아내는 함수들과 메서드에 대해 정리해보자.

 

[배열이 가진 성분들/ 관련 함수 및 메서드]

.ndim

.shape

.size

.dtype

type()

 

.reshape(행,열)

np.concatenate([배열1, 배열2, ...], axis = 0)

np.split(배열, [i], axis = 0)

 

np.sum(배열)

np.sum(배열, axis = 0)

np.min(배열)

np.max(배열)

np.mean(배열)

np.std(배열)

 

 

1. .ndim

 - 배열의 차원 알아보기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(my_arr.ndim) # 결과 : 2
 

 

2. .shape

 - 배열의 행*열 모양 알아보기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(my_arr.shape) # 결과 : (3,4)
 

 

3. .size

 - 배열요소의 개수 세기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(my_arr.size) # 결과 : 12

 

4. .dtype

- 배열요소의 데이터타입 알아보기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(my_arr.dtype) # 결과 : int64

 

5. type()

 - 배열 자체의 타입 알아보기

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[2 6 8 8]
 [9 6 0 8]
 [6 0 6 4]]

print(type(my_arr)) # 결과 : <class 'numpy.ndarray'>
 

6. .reshpe(행*열)

 - 배열의 모양 바꾸기 

 - 배열요소의 갯수에 맞게 모양을 바꿀 수 있다.

 - 요소갯수의 약수로만 만들 수 있다.

 - 2차원 배열에서 --> 다른 N차원으로 변경 불가

import numpy as np
my_arr = np.random.randint(0,10,(3,4))

[[9 2 1 9]
 [8 5 4 9]
 [2 9 1 7]] 

re_arr = my_arr.reshape(2,6) 
# 결과 
[[9 2 1 9 8 5]
 [4 9 2 9 1 7]]

re_arr2 = my_arr.reshape(2,2,4) 
#결과 : ValueError: cannot reshape array of size 12 into shape (2,2,4)

re_arr3 = my_arr.reshape(5,3)
# 결과 : ValueError: cannot reshape array of size 12 into shape (5,3)

 

7. np.concatenate()

 - 배열 합치기 

 - axis = 0/1 로 지정해줌으로써 합치는 방향을 정할 수 있다.

 - axis = 0 : 세로방향으로 이어 붙이기 , 열의 숫자를 맞춰주어야 한다.

 - axis = 1 : 가로방향으로 이어 붙이기 , 행의 숫자를 맞춰주어야 한다.

 

import numpy as np

A = np.random.randint(0,10,(2,3))
B = np.random.randint(11,100,(4,3))

AB = np.concatenate([A,B], axis = 0)
# 결과 
[[ 3  4  3]
 [ 2  9  3]
 [68 80 60]
 [12 62 86]
 [53 34 19]
 [50 57 32]]

A = np.random.randint(0,10,(2,3))
C = np.random.randint(11,100,(2,4))

AC = np.concatenate([A,C], axis = 1)
#
[[ 0  4  6 68 95 80 33]
 [ 5  5  5 84 39 13 15]]
 

 

8. np.split()

 - 배열 나누기 , 쪼개기 

 - axis 를 설정해줌으로써 가로방향으로 쪼갤지, 세로방향으로 쪼갤지 정할 수 있다.

 - axis = 0 : upper/lower 

 - axis = 1 : left/right 

 

import numpy as np

my_arr = np.random.randint(0,10,(3,4))
[[9 2 1 9]
 [8 5 4 9]
 [2 9 1 7]] 

upper, lower = np.split(my_arr, [1], axis = 0)
# 결과
print(upper) 
[[6 1 4 4]]
print(lower)
[[5 5 1 6]
 [0 7 6 6]]

left, right = np.split(my_arr, [1], axis = 1)
# 결과 
print(left) 
[[6]
 [5]
 [0]]
print(right)
[[1 4 4]
 [5 1 6]
 [7 6 6]]​

 

9. sum()

 - 배열요소들의 합 구하기 

 - axis 설정으로 가로방향 누적합/ 세로방향 누적 합을 구할 수 있다.

import numpy as np

my_arr = np.random.randint(0,10,(3,4))

[[9 2 1 9]
 [8 5 4 9]
 [2 9 1 7]] 

print(np.sum(my_arr)) # 결과 : 51

print(np.sum(my_arr, axis = 0))
# 결과 
[11 13 11 16]

print(np.sum(my_arr, axis = 1))
# 결과 
[15 17 19]
 

 

10. np.min(), np.max(), np.mean(), np.std(), np.count_nonzero()

- np.min() : 배열 요소 중 최소값 구하기

- np.max() : 배열 요소 중 최대값 구하기

- np.mean() : 배열요소들의 평균 구하기 

- np.std() : 배열 요소들의 표전편차 구하기

- np.count_nonzero() : 배열요소들 중 0이 아닌 것의 갯수 

import numpy as np

my_arr = np.random.randint(0,10,(3,4))

[[9 2 1 9]
 [8 5 4 9]
 [2 9 1 7]] 

print(np.min(my_arr)) # 결과 : 0

print(np.max(my_arr)) # 결과 : 7

print(np.mean(my_arr)) # 결과 : 4.25

print(np.std(my_arr)) # 결과 : 2.2407216099581255

print(np.count_nonzero(my_arr)) # 결과 : 12
 

 

랜덤한 수를 난수라고 한다.

np.random 을 사용해서 난수로 채워진 여러가지 배열을 만들어 보려한다.

 

1. np.random.random(행*열) : 원하는 행렬 크기로 난수배열 만들기

튜플()의 형태로 행*열이라고 생각하여 원하는 모양의 숫자를 입력하면 된다. (주의할점은 괄호()가 두개이다)

 

import numpy as np
a = np.random.random((3,4))
print(a)
# 결과
#[[0.30822896 0.62104282 0.09954799 0.9689817 ]
# [0.86878544 0.08885583 0.84083332 0.42928726]
# [0.13762798 0.34424021 0.68729553 0.02205725]]
 

 

2. np.random.normal(평균, 표준편차, (행*열)) : 평균과 표준편차를 지정하여 표준정규분포표에서 랜덤으로 원하는 크기의 숫자 데이터 배열만들기

 

import numpy as np
b = np.random.normal(0,1,(2,3))
print(b)
# 결과
#[[ 1.32520528 -1.41569207 -0.29792984]
# [ 0.61157424  1.4428348   0.81730907]]

 

3. np.random.randint(시작, 끝, (행*열)) : 시작숫자 이상 끝숫자 미만의 정수들을 랜덤으로 뽑아 원하는 크기의 행렬로 배열 만들기

import numpy as np
c = np.random.randint(0,10,(2,2))
print(c) 
# 결과
#[[6 3]
# [3 5]]
 

 

배열(Array)이란?

같은 타입의 변수들로 이루어진 유한 집합

배열을 구성하는 각각의 값을 배열요소(element)라고 하며, 배열에서 위치를 가리키는 숫자는 인덱스(index)라고 한다.

 

파이썬에서 리스트의 확장판이라고 생각하면 쉽다.

1차원의 리스트를 N차원까지 확대한 것이 배열이다.

하지만 현실세계에서는 대용량의 리스트가 존재하며, 이를 다룰 때에는 Numpy 라이브러리를 사용하는 것이 아주 강력하다.

 

Numpy : 고성능의 수치 계산을 위해 만들어진 라이브러리

 

numpy 라이브러리를 사용할 때는 다음과 같이 라이브러리를 사용하겠다고 명시&입력을 해주어야 관련된 클래스나 함수를 가져다 쓸 수 있다.

 

import numpy as np

 

1) 배열만들기

1차원 배열 = 리스트와 비교를 해보았다.

한가지 차이점은 리스트는 원소들의 데이터타입이 서로 달라도 가능하지만, 배열은 모두 같아야만 한다.

list(range(5))
# 결과 : [0, 1, 2, 3, 4]

np.array([0,1,2,3,4,5])
# 결과 : [0 1 2 3 4 5]

np.arange(5)
# 결과 : [0 1 2 3 4 5]

2) 여러가지 배열 만들기 함수

ㅇ 이차원 배열 만들기 : 원하는 모양대로 하나의 원소를 리스트로 만들어서 np.array()안에 입력하면 된다.

import numpy as np
my_array = np.array([[1,2],
                      [3,4]])
# 결과 :
[[1 2]
 [3 4]]
 

ㅇ 배열의 데이터 타입 결정하기, 데이터타입 확인하기, 데이터 타입 바꾸기

my_array = np.array([1,2,3,4,5], dtype = float)
# 결과 : my_array = [1., 2., 3., 4., 5.]
my_array.dtype 
# 결과 : dtype('float64')
my_array.astype('int')
# 결과 : my_array = [1,2,3,4,5]

 

 

ㅇ 여러가지 배열 만들기 :

 배열요소가 비어있는 배열 만들기, 초기화가 없는 값으로 배열을 반환 np.empty

 0으로 채워진 배열 만들기 np.zeros()

 1로 채워진 배열 만들기 np.ones()

 np.arange(시작값, 끝값, 간격)

 np.linspace(시작값, 끝값, 등분)

 

arr_empty = np.empty
# 결과 : <built-in function empty>
arr_0 = np.zeros(5)
# 결과 : [0. 0. 0. 0. 0.]
arr_1 = np.ones((3,5), dtype = int)
# 결과 : 
[[1 1 1 1 1]
 [1 1 1 1 1]
 [1 1 1 1 1]]
arr_2 = np.arange(0,10,2)
# 결과 : [0 2 4 6 8]
arr_3 = np.linspace(0,1,5)
# 결과 : [0.   0.25 0.5  0.75 1.  ]

 

3. 리스트를 받아서 배열로 만들기

np.array(리스트명) 으로 바로 배열로 만들 수 있다.

리스트를 바로 사용하지 않고 배열로 바꾸는 이유는 numpy의 강력한 연산과 데이터 처리 기능을 사용하기 위해서 이다.

받는 리스트의 크기가 클 수록 반드시 선행되어야 하는 작업이다.

 

my_list = [1,2,3,4,5]
my_array = np.array(my_list)
# 결과 : my_array = [1 2 3 4 5]
 

 

+ Recent posts