● Numpy는 기본적으로 배열의 구조로 되어있다. 또한 다차원 배열, 배열 간 연산, 배열의 정렬 등의 기능도 제공한다.
● Numpy에서의 핵심은 다차원을 지원하는 배열 객체 ndarray 이다.
● ndarray 객체는 리스트와 같은 배열 형태로 되어 있지만, 리스트보다 훨씬 더 편리한 기능을 제공한다.
● 배열 객체 ndarray를 생성하는 가장 간단한 방법은 Numpy의 array() 메소드를 이용한는 것이다.
● ndarray 객체의 모든 요소는 int32(32비트 정수형), float64(64비트 실수형) 등과 같이 동일한 데이터 형을 가진다.
이렇게 함으로써 배열 연산 시 처리 속도가 빨라진다
▶ 1. 배열 생성하는 방법
import numpy as np
data = np.array([1, 2, 3, 4, 5])
print(data)
print(type(data))
print(data.dtype)
[1 2 3 4 5]
<class 'numpy.ndarray'>
int32
▶ 2. Numpy의 random.randn() 메소드를 이용하여 2차원(2행 3열)의 실수형 랜덤 수를 생성
import numpy as np
data = np.random.randn(2,3)
#2행 3열의 실수형 랜덤 수 발생
print(data)
print(data.shape)
#2행 3열
print(data.dtype)
#실수형의 데이터형
[[ 1.20488336 2.19555102 0.81133548]
[ 0.11816927 2.15649683 -1.33816876]]
(2, 3)
float64
▶ 3. np.zeros() 0으로 객체 초기화 하기
import numpy as np
#넘파이 모듈 불러오기
data1 = np.zeros(10)
#0으로 객체 초기화 하기, 0이 10개 입력됨
print(data1)
#[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
print(data1.dtype)
#float64
data2 = np.zeros((2,3))
# 2행 3열의 0.0으로 초기화된 64비트 실수형 ndarray 객체를 생성
print(data2)
print(data2.dtype)
data3 = np.zeros((2, 3),dtype=np.int32)
#0으로 초기화된 32비트 정수형의 ndarray 객체를 생성
print(data3)
print(data3.dtype)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
float64
[[0. 0. 0.]
[0. 0. 0.]]
float64
[[0 0 0]
[0 0 0]]
int32
▶ 4. np.ones() 1로 객체 초기화 하기
import numpy as np
data1 = np.ones(8)
#ndarray 객체를 1로 초기화하여 8개 요소가 모두 1인 ndarray 객체를 생성
print(data1)
data2 = np.ones((3,4) ,dtype=np.int32)
#3행 4열의 2차원 ndarray 객체의 모든 요소가 1이고
#객체 요소의 데이터 형을 32비트 정수형
print(data2)
[1. 1. 1. 1. 1. 1. 1. 1.]
[[1 1 1 1]
[1 1 1 1]
[1 1 1 1]]
▶ 5. arange() 메소드
import numpy as np
data = np.arange(10,121,10)
#파이썬의 내장함수인 range()와 사용법 동일
#10에서 121-1까지 (10씩증가)
print(data)
print(data[2])
#data의 인덱스 2인 요소의 값 30
print(data[5:8])
#data의 인덱스 5~`7까지의 요소의 값 [60 70 80]
data[7:10] = 800
#data의 인덱스 7~`9에800`의 값을 저장
print(data)
data2 = data.reshape(2, 6)
#ndarray의 객체 data를 2행 6열로 재구성
print(data2)
[ 10 20 30 40 50 60 70 80 90 100 110 120]
30
[60 70 80]
[ 10 20 30 40 50 60 70 800 800 800 110 120]
[[ 10 20 30 40 50 60]
[ 70 800 800 800 110 120]]
▶ 6. 2차원 배열의 요소 추출
import numpy as np
data = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])
print(data)
print(data[2][3])
# data에서 인덱스가 2인 행과 인덱스가 3인 열에 해당되는 요소의 값 14
print(data[0][1:])
#data에서 인덱스 0인 행에서/ 인덱스 1인 열부터 나머지 열까지의 데이터의 값 [2 3 4 5]
print(data[0])
#data에서 인덱스 0인 행의 데이터의 값 [1 2 3 4 5]
print(data[[1, 2]])
data에서 인덱스 1과 2인 행의 데이터 값
print()
data[1] = 100
#data[1]은 인덱스 1의 행 데이터를 의미하는데 이곳에 100으로 변경
print(data)
data[:] = 200
#data[:]는 data의 모든요소이므로 모든 요소의 데이터를 200으로 변경
print(data)
[[ 1 2 3 4 5]
[ 6 7 8 9 10]
[11 12 13 14 15]]
14
[2 3 4 5]
[1 2 3 4 5]
[[ 6 7 8 9 10]
[11 12 13 14 15]]
[[ 1 2 3 4 5]
[100 100 100 100 100]
[ 11 12 13 14 15]]
[[200 200 200 200 200]
[200 200 200 200 200]
[200 200 200 200 200]]
▶ 7. 배열의 산술 연산
●리스트와 비교했을 때 ndarray의 장점 중 하나는 배열에 대해 산술 연산(+, -, *, /, % 등)이 바로 가능한 점 입니다.
import numpy as np
a = np.array([[10, 7, -8, 2],
[-2, 2, 8, 3],
[6, -8, -5, 3]])
b = a*2
#배열a의 모든 요소에 2가 곱해진 값이 b에 저장
print(b)
c = a**2
#배열a의 모든 요소의 제곱값이 ndarray 객체 c에 저장
print(c)
print(a>b)
#배열에 대한 비교 연산은 참(True), 거짓(False)의 불 (Bool) 값을 반환
[[ 20 14 -16 4]
[ -4 4 16 6]
[ 12 -16 -10 6]]
[[100 49 64 4]
[ 4 4 64 9]
[ 36 64 25 9]]
[[False False True False]
[ True False False False]
[False True True False]]
▶ 8. 배열의 통계 메소드
● Numpy를 이용하여 배열의 합계, 평균, 최댓값, 최솟값 구하기
import numpy as np
data = np.array([[80, 78, 90, 93],
[65, 87, 88, 75],
[98, 100, 68, 80]])
print(data.sum())
#배열의 모든 요소의 합계를 반환
print(data.mean())
#배열의 모든 요소의 평균 값을 반환
print(data.max())
#배열의 모든 요소의 값 중에서 최댓값을 반환
print(data.min())
#배열의 모든 요소의 값 중에서 최솟값을 반환
print('')
print(data.max(axis=0))
#각 열의 요소 값 중 최댓값을 구해서 얻은 배열을 반환
print(data.max(axis=1))
#각 행의 요소 값 중 최댓값을 구해서 얻은 배열을 반환
print('')
index1 = np.argmax(data, axis=0)
#Numpy의 argmax() 메소드는 열 또는 행 방향으로 최댓값을 갖는 요소의 인덱스를 반환
#즉, data에서 각 열에 대해 요소가 최댓값을 가지는 인덱스 [2 2 0 0]을 반환
index2 = np.argmin(data, axis=1)
#Numpy의 argmin() 메소드는 열 또는 행 방향으로 최댓값을 갖는 요소의 인덱스를 반환
#즉, 배열 객체 data에서 각 행에 대해 요소가 최솟값을 가지는 인덱스 [1 0 2]를 반환
print(index1, index2)
1002
83.5
100
65
[ 98 100 90 93]
[ 93 88 100]
[2 2 0 0] [1 0 2]
▶ 9. 배열에 조건식 사용하기
import numpy as np
data = np.array([
[0.823293, 0.292996, -2.59991429, 0.9087267],
[-0.28825592, 0.3996413, 0.49922846, -0.32000343],
[1.12672336, -0.51248337, 0.99202783, 0.77582767]
])
# data = np.random.randn(3,4) 의 값을 실습을 위해 정적인 값으로 바꾸었습니다.
print(data)
print(data>0)
#배열의 요소의 값이 양수인 경우 에는 True, 0 또는 음수일 경우에는 False의 요소 값을 가지는 배열을 생성
total = (data <0).sum()
#음수값요소의 개수의 합
print(total)
data2 = np.where(data>0,1,-1)
#data에서 요소값이 양수인 경우에는 1 출력, 그렇지 않은 경우에는 -1출력의 요소값을 가지는 배열
print(data2)
data3 = np.where(data > 0, 5,data)
#data에서 요소값이 양수인 경우에는 5출력, 그렇지 않을 경우에는 해당 요소의 값을 출력의 요소값을 가지는 배열
print(data3)
[[ 0.823293 0.292996 -2.59991429 0.9087267 ]
[-0.28825592 0.3996413 0.49922846 -0.32000343]
[ 1.12672336 -0.51248337 0.99202783 0.77582767]]
[[ True True False True]
[False True True False]
[ True False True True]]
4
[[ 1 1 -1 1]
[-1 1 1 -1]
[ 1 -1 1 1]]
[[ 5. 5. -2.59991429 5. ]
[-0.28825592 5. 5. -0.32000343]
[ 5. -0.51248337 5. 5. ]]
▶ 10. 배열의 요소 정렬
import numpy as np
data = np.array([[13, 22, 17, 2],
[-2, 20, 8, 3],
[-16, 10, -5, 33]])
data.sort(0)
#각 열을 중심으로 해당 열의 요소들을 오름차순으로 정렬
print(data)
print()
data.sort(1)
# 각 행을 중심으로 해당 행의 요소들을 오름차순으로 정렬
print(data)
[[-16 10 -5 2]
[ -2 20 8 3]
[ 13 22 17 33]]
[[-16 -5 2 10]
[ -2 3 8 20]
[ 13 17 22 33]]
▶ 10. 배열의 요소 정렬
● 열과 행을 삽입하기
import numpy as np
a = np.arange(10)
#0-9까지의 정수 생성
print(a)
print()
b = np.insert(a,3,10)
# Numpy의 insert() 메소드는 ndarray 배열의 열 또는 행에 데이터를 삽입하는 데 사용
#배열 a의 인덱스 3의 요소에 10의 값을 삽입
print(b)
print()
x = np.array([[1, 1, 1], [2, 2, 2], [3, 3, 3]])
print(x)
print()
y = np.insert(x, 1, 10, axis=0)
#배열 x의 열방향으로 인덱스 1의 요소에 모든 요소 값이 10인 행을 하나 삽입
print(y)
print()
y = np.insert(x, 1, 10, axis=1)
#배열 x의 행방향으로 인덱스 1의 요소에 모든 요소 값이 10인 행을 하나 삽입
print(y)
[0 1 2 3 4 5 6 7 8 9]
[ 0 1 2 10 3 4 5 6 7 8 9]
[[1 1 1]
[2 2 2]
[3 3 3]]
[[ 1 1 1]
[10 10 10]
[ 2 2 2]
[ 3 3 3]]
[[ 1 10 1 1]
[ 2 10 2 2]
[ 3 10 3 3]]
출처: 예제 중심 파이썬 입문
궁금한 부분이 있으면 댓글 부탁드립니다^^
'• programming language > python' 카테고리의 다른 글
[파이썬 예제] Numpy 2- 최대 학급수/학생수/교사수 찾기 (0) | 2022.07.29 |
---|---|
[파이썬 예제] Numpy 1- 최대 학급수/학생수/교사수 찾기 (0) | 2022.07.29 |
[파이썬 예제] Matplotlib 15- 전국의 종합병원 정보 분석 (5) (0) | 2022.07.25 |
[파이썬 예제] Matplotlib 14- 전국의 종합병원 정보 분석 (4) (0) | 2022.07.25 |
[파이썬 예제] Matplotlib 13- 전국의 종합병원 정보 분석 (3) (0) | 2022.07.25 |