넘파이: 행렬이나 대규모 다차원 배열을 쉽게 처리하도록 도와주는 파이썬 패키지
리스트와 차이
리스트(List) | 넘파이(Numpy) | |
자료형 | 다양한 자료형 | 동일한 자료형 |
배열의 크기가 커질수록 | 성능 떨어짐 | 높은 성능 보장 |
Numpy 패키지 추가
#numpy 패키지를 np라는 이름으로 사용
import numpy as np
ndarray 객체: 넘파이 패키지에 있는 다차원 배열을 지원하는 클래스이다.
ndarray 객체 생성 메소드: array(), random.randn(), zeros(), ones(), arange(), reshape()
1. np.array(리스트/튜플)
리스트, 튜플 등을 ndarray 객체로 생성
ar1=np.array([1,2,3,4,5]) #1차원 리스트->ndarray 객체
ar2=np.array([[1,2,3],[4,5,6]]) #2차원 리스트->ndarray
ar3=np.array((1,2,3,4,5)) #1차원 튜플->ndarray
ar4=np.array(((1,2),(3,4))) #2차원 튜플->ndarray
ar1~ar4 출력 결과
2. np.random.randn(배열 수)
표준정규분포를 갖는 난수를 생성
ar3=np.random.randn(3)
#2행3열의 2차원 배열
ar4=np.random.randn(2,2)
ar3,ar4 출력 결과
+np.random.randint, np.random.rand도 있다(아래 참고 사이트 확인)
3.
np.zeros(배열 수)
ndarray 객체 생성 후 0으로 초기화
np.ones(배열 수)
ndarray 객체 생성 후 1로 초기화
#1차원
ar5=np.zeros(6)
ar6=np.ones(6)
#2차원
ar5=np.zeros((2,3))
ar6=np.ones((2,3))
4. np.arange(시작, 끝, 증가값)
내장함수 range()와 동일한 기능
ar1=np.arange(1,12,2) #1부터 11까지 2씩 증가
ar2=np.arange(10,0,-1) #10부터 1까지 1씩 감소
5. np.reshape(배열 수)
ndarray의 차원을 재구성
reshape()시 배열의 크기가 동일해야 함
ar=np.arange(1,12,2)
#reshape()는 크기가 맞아야 함
ar1=ar.reshape(2,3)
ar2=ar.reshape(3,2)
배열 다루기
리스트와 동일
ar1=np.array([1,2,3,4,5])
ar2=np.array([[1,2,3],[4,5,6]])
print(ar1[3])
print(ar2[0][0])
ar2[0][0]=100 #원소 변경
print(ar2[0])
배열의 산술 연산
리스트의 합과 numpy 객체의 합과 곱은 다름
numpy에는 c 기반 for문이 내장되이 있어 자동으로 모든 원소에 합, 곱을 한다. (아래 사이트 참고)
합: 리스트는 리스트끼리 연결, 넘파이는 각 원소에 숫자 더함/각 원소끼리 합
곱: 리스트는 리스트 숫자 만큼 반복, 넘파이는 각 원소 숫자 곱함/원소끼리 곱
#리스트
a=[1,2,3]
b=[5,6,7]
print(a+b)
print(a*4)
#print(a*b) #오류
#넘파이 배열
a=np.array(a)
b=np.array(b)
print(a+b)
print(a*3)
print(a*b)
ndarray 객체 사용을 위한 메소드
sum() | 합계 반환 |
mean() | 평균값 반환 |
max() | 최대값 반환 |
min() | 최소값 반환 |
argmax() | 열 또는 행의 요소 중 최대값을 가지는 요소의 인덱스 반환 |
argmin() | 열 또는 행의 요소 중 최소값을 가지는 요소의 인덱스 반환 |
where() | 조건식에 따라 배열의 요소 값을 특정 값으로 변경 |
sort() | 배열을 오름차순으로 변 |
#둘 다 사용 가능
np.sum(배열이름)
배열이름.sum()
axis는 배열의 축을 지정(아래 참고 사이트)
axis=0이면 각 열마다 원소 해당되는 원소를 찾음
axis=1이면 각 행마다 해당되는 원소를 찾음
ar2=np.array([[1,2,3],[4,5,6]])
print(ar2[0])
print(ar2[1][1])
print(ar2.sum())
print(ar2[0].sum())
2차원 배열 오름차순 정렬하기: sort(0), sort(1)
sort(0): 각 열마다 오름차순 정렬
sort(1): 각 행마다 오름차순 정렬(sort()했을 때 디폴트값)
배열 조건식 사용
ar1=np.array([[5,7,9],[-7,-6,19],[6,9,11]])
#ar1의 각 원소가 0보다 큰지 판단하는 결과를 출력 T,F로
print(ar1>0)
#리스트 ar1에서 (ar1>0)하면 오류남
#원소 중 음수가 몇 개인지 계산
m_count=np.sum(ar1<0) #True는 1, False는 0
print((np.where(ar1<0))) #인덱스 반환
print(m_count)
#ar1의 원소가 0보다 작으면 부호를 바꾸고 그렇지 않으면 ar1의 값으로 대입
print(np.where(ar1<0,-ar1,ar1))
넘파이 배열 필터링
True면 배열에 포함하고, False면 배열에 포함하지 않는다.
참고
np.random
https://nittaku.tistory.com/443
axis
https://jimmy-ai.tistory.com/116
리스트, 넘파이, 판다스 차이
https://www.youtube.com/watch?v=4FBdRbT6D8s&t=1s
이기적 빅데이터 분석 기사 실기
'빅데이터 공부' 카테고리의 다른 글
데이터 클리닝 (0) | 2023.11.29 |
---|---|
판다스 기본 제공 메소드로 시각화하기 (2) | 2023.11.23 |
DataFrame 다루기 (1) | 2023.10.26 |
Pandas DataFrame의 데이터 전처리 (0) | 2023.07.12 |
판다스(Pandas) (0) | 2023.06.17 |