구글 코랩(google colab)

Google Colab(구글 코랩) - NumPy

aisw7984 2024. 10. 8. 16:30
반응형

기본적으로 파이썬 학습을 어느정도 할줄 안다면 파이썬을 바탕으로 한 NumPy를 시도해 볼 수 있다.

 

Nompy 넘파이는 오픈 소스 파이썬 라이브러리로 대규모 다차원 배열 테이터 처리를 위한 수치 연산 기능을 제공한다. 데이터 과학 분야 프로그램에서 처리하는 데이터는 대부분 숫자들의 배열로 이루어진 경우가 많기 때문에 넘파이는 무척 유용하게 쓰인다.

넘파이는 파이썬 기본 패키지가 아님 따라서 import로 불러서 사용해야한다. 추가적으로 파이썬에서 실행시
설치를해줘야 하지만 colab은 다양한 데이터 사이언스 프로그램을 지원하기때문에 따로 설치가 필요 없다.
 
import numpy as np
#ndarray 생성 - 넘파이 배열
#1차원 배열
arr1 = np.array([1,2,3,4])
print(arr1)
arr2 = np.array([[1,2,3,4],
                [5,6,7,8]])
print(arr2)
print("\n")
# .shape : 넘파이의 값을 튜플 형태로 나타내는 것
#. ndim : 넘파이 속성의 차원을 표시해줌
print(arr1.shape, arr1.ndim)
print(arr2.shape, arr2.ndim)
print("\n")

 

*주의* : 넘파이는 기본 파이썬의 array와는 다르게 다른형태의 자료형이 올경우 오류가 생길수 있으므로
같은 데이터 타입으로 구성되어야한다. 만약 다른 형태의 데이터 형태가 있으면 강제로 형 변환을 하는데 이때는 손실이 적은 방향으로 동작한다

 .arange :를 사용하면 특정범위의 배열을 빠르게 생성할 수 있다.
 .linspase(a,b,c) : a~b 까지 범위를 c만큼 나누어서 배열을 만든다는 의미 c가 없으면 50이 적용됨
 .zeros / .ones : 0이나 1의 값으로만 배열을 채울떄 사용 행과 열로된 배열도 가능
 .full(,): 특정한 값(배열도 가능)으로 체울 때 사용
 .zeros_like / .ones_like : 기존 배열에 0과 1로 값을 대체할때 사용
 .reshape : 기존에 있는 넘파이 배열을 다른 형태로 바꾸때 사용 이때 바꿀려는 값이 크거나 작다면 오류
 
위와 같은  코드는 간단하게 사용해보면 쉽게 이해 할수 있다.

 

인덱싱 & 슬라이싱

pandas에서는 차원이라는 개념이 추가되었기 때문에 기존 파이썬과는 익덱싱과 슬라이싱의 방법이 다르다

#특정 위치 인덱싱
arr1d = np.arange(1,20,2) #1~19까지 2간격으로 생성
print(arr1d)
arr2d = arr1d.reshape(2,5)
print(arr2d)    
print(arr2d[0,2])
print("\n")

 


# 2차원에서 범위 슬라이싱
arr1d = np.arange(1,21)
arr2d = arr1d.reshape(4,5)
print(arr2d)
print("\n")
print(arr2d[0:2,0:2])
print("\n")
 
 
 

# 팬시 인덱싱 : 특정 열 혹은 행 의 값을 추출할때 -> array[A,B]
# A = 원하는 행의 / B = 원하는 열의  => 복수의 값이 와도 됨
print(arr2d[[0,2],[0,3]]) # (0행과 2행)과(0열과3열)을 만족하는 값
print("\n")
print(arr2d[0:2,[0,4]]) # (0~1(2-1)행)과(0열과4열)을 만족하는 값
print("\n")

#불리언 인덱싱 : 조건 필터링과 검색을 동시에 수행할 수 있는 유용한 인덱싱 방식
#대괄호 연산자에 불리언 데이터를 삽입하는 기본적인 방법에서, 조건식을 삽입하는 다소 복잡한 필터링도 수행가능
arr = np.arange(1,13)
print(arr)
print("모둘 False로 바꿈")
farr = np.full(12,False)
print(arr[farr])
print("모둘 True로 바꿈")
Tarr = np.full(12,True)
print(arr[Tarr])
print()
TFarr = (arr[[
    True,False,
    True,False,
    True,False,
    True,False,
    True,False,
    True,False
]])
print("True False 교차 출력")
print(TFarr)
print()
print("조건에 맞는 값만 출력 : arr>5")
print(arr[arr>5])

 

#sorting(정렬)
#넘파이의 경우 데이터를 처리하는 용도로 사용하기때문에 정렬하는것이 중요하다
#기본적인 정렬은 .sort 를 사용하면 되는데 .argsort의 경우 정렬하기 이전 해당 값이 가지고있던 인덱스를 알려준다.
 
sort() argsort()

#배열로 산술연산하기
#기본적으로 넘파이는 여러 차원을 가지고 있을 수 있는데 기본적인 산술은 각 대응 원소끼리 이루어 진다.
# 덧셈
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
print(arr1 + arr2)  # 출력: [5 7 9]

# 뺄셈
print(arr1 - arr2)  # 출력: [-3 -3 -3]

# 곱셈
print(arr1 * arr2)  # 출력: [ 4 10 18]

# 나눗셈
print(arr1 / arr2)  # 출력: [0.25 0.4  0.5 ]

# 제곱
print(arr1 ** 2)  # 출력: [1 4 9]

# 행렬 곱셈
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
print(np.dot(arr1, arr2))
# 출력: [[19 22]
#        [43 50]]

# 요소별 최대값
arr1 = np.array([1, 3, 5])
arr2 = np.array([2, 4, 6])
print(np.maximum(arr1, arr2))  # 출력: [2 4 6]

# 요소별 최소값
print(np.minimum(arr1, arr2))  # 출력: [1 3 5]

# 합계
arr = np.array([1, 2, 3, 4, 5])
print(np.sum(arr))  # 출력: 15

# 평균
print(np.mean(arr))  # 출력: 3.0

# 표준 편차
print(np.std(arr))  # 출력: 1.4142135623730951

# 최대값
print(np.max(arr))  # 출력: 5

# 최소값
print(np.min(arr))  # 출력: 1

 

#원소의 추가 및 삭제
#insert delete 는 파이썬과 동일하게 위치를 특정해 주면된다.
#2차원의 경우 행과 열이라는 정보가 있기 떄문에
#axis를 통해 값을 행으로 처리할것인지 열로 처리할것인지를 알려준다
arr = np.arange(1,13)
arr = arr.reshape(3,4)  
print(arr,end ="\n\n")
 
#axis =0 행
arr1 = np.insert(arr,2,[-1,-2,-3,-4],axis=0)
print(arr1,end ="\n\n")
arr1 = np.delete(arr1,2,axis=0)
print(arr1,end ="\n\n")
 
#axis =1 열
arr2 = np.insert(arr,2,[-1,-2,-3],axis=1)
print(arr2,end ="\n\n")      
arr2 = np.delete(arr2,2,axis=1)
print(arr2,end ="\n\n")
 

 

반응형