빅데이터 공부

넘파이(Numpy)

왕초보코딩러 2023. 6. 3. 02:37
728x90

넘파이: 행렬이나 대규모 다차원 배열을 쉽게 처리하도록 도와주는 파이썬 패키지

 

리스트와 차이

  리스트(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()했을 때 디폴트값)

ar2=np.array([[1,3,-1],[-3,7,-6]])
ar2.sort()
print(ar2)
ar2=np.array([[1,3,-1],[-3,7,-6]])  
ar2.sort(0)
print(ar2)
ar2=np.array([[1,3,-1],[-3,7,-6]])   
ar2.sort(1)
print(ar2)

 

배열 조건식 사용

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면 배열에 포함하지 않는다.

https://homzzang.com/b/py-323

 

홈짱닷컴

홈페이지 제작, 그누보드 강의, 웹코딩, HTML, CSS, JAVASCRIPT, JQUERY, PHP, SQL

homzzang.com

 

 

 

참고

np.random

https://nittaku.tistory.com/443

 

python random모듈 3개 정리 (randint, rand, randn)

numpy 의 np.random. randint vs rand/randn¶np.random.seed seed를 통한 난수 생성 np.random.randint 균일 분포의 정수 난수 1개 생성 np.random.rand 0부터 1사이의 균일 분포에서 난수 matrix array생성 np.random.randn 가우시

nittaku.tistory.com

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