Blair  - Soul Eater 3. 데이터 분석을 위한 핵심 Tool Python(김상모 강사님)_13

• 패스트캠퍼스 데이터분석 부트캠프 12기

3. 데이터 분석을 위한 핵심 Tool Python(김상모 강사님)_13

oujin 2024. 1. 15. 10:29
728x90

넘파이

▶ 행렬 슬라이싱 하기

a = np.array([[0,1,2,3,4],
             [5,6,7,8,9],
             [10,11,12,13,14]])

print(a[1,2]) #7
print(a[-1,-1]) #14
print(a[1,:2]) #5 6
print(a[1:3,2]) #7 12
print(a[0:2,3:5]) #[3 4] [8 9]

 

#조건문 연산을 사용해 간단히 쓰기 가능
print(a %2)
print(a %2==0)
print(a[a%2==0])

 

▶ 정수배열 인덱싱

#정수배열 인덱싱
a= np.array([11,22,33,44,55,66,77,88,99])
idx = np.array([0,2,4,6,8])
a[idx]
a = np.array([11,22,33,44,55,66,77,88,99])
idx = np.array([0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2])
a[idx]

 

#정수형 배열에서 배열인덱싱
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(a[:,[True,False,False,True]])
print(a[[2,0,1],:])

 

▶ 배열 인덱싱, & and 차이 

x = np.array([1,2,3,4,5,6,7,8,9,10,
             11,12,13,14,15,16,17,18,19,20])
#3의 배수
print(x[x%3==0])
#4로 나누면 1이 남는수
print(x[x%4==1])
#3으로 나누어지고 4로나누면 1이 남는수
print(x[(x%3==0) & (x%4==1)]) #and:두개의 논리식에 사용 &:비트연산(위치(인덱스)의 개념)

 

▶ 넘파이 배열은 원소가 모두 같은 자료형이어야 함

np.array를 사용하여 자료형을 명시적으로 적용하러면 dtype인수를 사용한다.

x = np.array([1,2,3])
print(x.dtype) #int32
xx = np.array([1.0,2.0,3.0])
print(xx.dtype) #float64

 

정수와 실수가 섞여 있으면, 실수가 하나라도 있기 때문에 정소의 손실을 최소화 하는 방향인, 정수->실수로 바꾸어 저장됨

x = np.array([1,2,3.0])
print(x.dtype) #float64

 

▶ 무한대 inf

a = np.array([1.0,2.0,-3.0,0.0])
b = np.array([0.0,1.0,0.0,0.0])
c = a/b
print(c) #nan: 허용되지 않는다

 

▶ 다양한 배열 생성

a = np.zeros(5);print(a)
b = np.zeros((2,3));print(b)
c = np.zeros((5,2), dtype="i"); c

실행결과 ↓

[0. 0. 0. 0. 0.]
[[0. 0. 0.]
 [0. 0. 0.]]
array([[0, 0],
       [0, 0],
       [0, 0],
       [0, 0],
       [0, 0]], dtype=int32)

 

 

▶ 문자열 배열은 모든 원소의 크기가 같아야 한다.

d = np.zeros(5,dtype="U4")
d[0] = 'abc'
d[1] = 'abcd'
d[2] = "ABCDE"
d[3] = "가나다라마"
d

 

다양한 배열1

# 배열의 모양 정해주기
e = np.ones((2,3,4),dtype='i8')

 

실행결과 

array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int64)

다양한 배열2

f = np.zeros_like(b,dtype='f')
f
ff = np.ones_like(b,dtype='f')
ff

다양한 배열3

# 쓰레기값 들어감
g = np.empty((4,3))
g

 

▶ 배열 모양 바꾸기 1

#np.arange(3,21,2) #시작, 끝(포함안함),단계
a = np.arange(12)
b = a.reshape(3,4)
#여기까지는 a값 바뀌지 않음
print(a)
print(b)

실행결과 

[ 0  1  2  3  4  5  6  7  8  9 10 11]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

▶ 배열 모양 바꾸기 2

#-1 넣으면 알아서 배열 만들어줌
#a 값 바뀜
a.reshape(3,-1)

실행결과 

array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

 

728x90