일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 관계형데이터베이스
- REACT
- 이클립스
- 오산대맛집
- SQL 문제
- Eclipse
- 타입
- java spring
- Flexbox Froggy
- SQL 연산자
- SQL
- java설치
- 람다식
- spring
- spring 환경설정
- HTML5
- 플랙스박스기본
- numpy
- ubuntu
- 자바 스프링
- Flex Box 기본
- 환경설정
- SQL 명령어
- node.js
- 자바스프링
- 노마드코더
- Hooks
- 리액트
- 객체지향프로그래밍
- 스프링
- Today
- Total
이것저것
Python 개발환경, Numpy 기본 설명 1(복습하면서 적는 설명) 본문
개발 환경 : Google Colab
구글 드라이브에서 google Colab 설치
없다면 연결할 앱 더보기에서 Colab을 설치한다
설치한다음에 실행하면 아래와 같이 창이 생긴다
젤 위에 제목을 수정해준다
.ipynb : 주피터 노트북이라는 웹 개발툴에서 사용하는 파일의 확장자
지금 연결되어 있는 것으로 나오는데 실행환경은 런타임 유형 변경 버튼으로 변경할 수 있다
CPU로 진행하면 되고 나중에 빅데이터나 인공지능때 T4 GPU를 사용할 예정
다른 셀에서 작성해도 실행을 하게되면 위에 만든 변수가 출력된다. 즉, 같은 메모리를 공유하고 있다는 뜻이다
Numpy 란?
Python의 기본 자료구조는 list이다.수치를 이용한 다차원 구조로 표현하기에는 python만은로는 약간 무리가 있다.행렬연산과 다차원 데이터 처리를 하기는데 적합한 라이브러리가 필요한데 그것이 Numpy이다.Numpy는 ndarray라는 자료구조를 사용할 수 있도록 한다.ndarray(n-dimensional array)
원래 Numpy는 Python의 기본 module이 아니다.따라서 사용하기 위해서는 module을 설치해야한다.지금 사용하는 Colab은 구글에서 지원해주는 것으로 기본 module들은 거의 설치되어 있는 상태이다.하지만 anaconda를 사용한다면 condat install numpy를 써주는게 좋다.pip로도 설치가 가능하지만 condat은 dependency에 추가될때 버전을 알아서 맞춰주기때문에 condat으로 사용하는것이 좋다.
Numpy를 사용하기 위해서는 당연히 ndarray의 생성이다.
import numpy as np
#import로 numpy를 사용할 수 있겠됐다
#python의 list 생성은 [] 이다
#대부분의 list 생성은 []가 맞으니까..
a [1, 2, 3, 4]
print("a list의 내용은 : {}".format(a)) # a list의 내용은 : [1, 2, 3, 4]
#a list를 생성하고 print로 출력한다.
print(type(a)) # <class 'list'>
python에서는 format(a)로 list a 부분을 불러오고 {}로 출력 값이 들어가는 곳을 나타내는 것같다.
알아보니 format은 함수이고 ()안에 들어가는 인자를 {}로 값을 보내주는 함수라고한다.
예를들어 print('a list의 내용은 : {}, a는 {}으로 생성했다.'.format(a, 'python') 이렇게 작성하면
a list의 내용은 : [1, 2, 3, 4], a는 python으로 생성했다.
이렇게 출력이 가능하다.
type은 말그대로 type을 알려주는 함수이다.
그러므로 a의 type인 list를 알려준다.
ndarry 생성해보기
b = np.array([1, 2, 3, 4])
print(type(b)) # <class 'numpy.ndarray'>
c = np.array([[1, 2], [3, 4], [5, 6]])
print(c)
# [[1 2]
# [3 4]
# [5 6]]
b는 위에 a처럼 list로 생성한것이 아니고 앞에 np.array npumy의 array를 사용해서 만들겠다는 뜻이므로
class 'numpy.ndarray' 라는 타입이라고 출력된다.
c는 배열을 뜻하는 []가 2개로 감싸져 있으므로 2차원 배열이다.
3행 2열으로 표현되므로 위와 같이 출력된다.
같은 데이터 타입을 갖는다
import numpy as np
my_list = [[1,2,3], [4,5,6]]
arr = np.array(my_list)
print(arr)
#[[1 2 3]
# [4 5 6]]
my_list2 = [[1,2,3], [3,4,np.nan]]
arr2 = np.array(my_list2)
print(arr2)
#[[ 1. 2. 3.]
# [ 4. 5. nan]]
코드를 설명하기전에 먼저 배열의 대표적인 특징 2가지를 설명하겠다.
1. 배열은 사이즈가 결정되면 바꿀수 없다.
처음에 이 말이 [1,2]로 배열을 생성하면 나중에 3을 추가할 수 없다라는 뜻인줄 알았는데 전혀 아니었다.
사이즈가 결정되면 바꿀 수 없다는 것은 안에 들어가는 값이 아니라
int[] arr = new int[3]; 이렇게 초기에 배열의 크기를 결정하게 되면 나중에는 배열의 크기를 변경할 수 없다는 뜻이었다.
(몰라서 GPT한테 물어봤다. 사실 완벽하게 이해는 못했다;;)
2. 모든 데이터가 같은 데이터 타입을 갖는다.
예를 들어 [1, 2, a] 라는 배열을 만들면 a는 문자이므로 1과 2가 정수값이 아닌 문자값으로 바뀌게된다.
코드 설명
첫번째 my_list를 생성하면 출력될때 [1,2,3] [4,5,6]이 아닌 [1 2 3] [4 5 6]으로 출력된다.
array안에 정수이므로 ,가 출력안되는건 당연한것이고 정수이기때문에 뒤에 소수점을 필요로 하지 않기때문에 위와 같이 출력된다.
반대로 my_list2는 뒤에 .이 붙는 이유는 np.nan은 nan값을 뜻하는데 여기서는 nan값을 실수로 간주한다.
그래서 앞에 있는 모든 정수들이 실수로 간주되어서 뒤에 .이 붙어서 출력된다.
ndarray의 기본 indexing
my_list = [[1,2,3], [4,5,6]]
arr = np.array(my_list)
print(arr)
print(arr[0, 2]) # 3
print(arr[0]) # [1 2 3]
print(arr[0][2]) # 3
arr는 기본적으로 전체가 출력된다.
arr[0, 2]는 0번째 열에서 2번째 행의 숫자를 말한다. (컴퓨터 언어는 무조건 0에서부터 시작한다.)
0번째 열 1,2,3 에서 2번째 숫자 즉 3이 출력된다.
arr[0] 0번째 열을 모두 출력 [1 2 3]이 출력된다.
arr[0][2] 똑같이 0번째를 먼저 출력하고 그다음에 2번째 숫자를 뽑아내므로 3이 출력된다.
ndarray의 주요 속성
a = [1, 2, 3, 4]
arr1 = np.array(a)
print(arr1) # [1 2 3 4]
print(arr1.ndim) # 1
print(arr1.shape) # (4,)
b = [[1, 2, 3], [4, 5, 6]]
arr2 = np.array(b)
print(arr2)
# [[1 2 3]
# [4 5 6]]
print(arr2.shape) #(2, 3)
c = [[[1], [1], [1]],[[1], [1], [1]]] #3차원 [[1], [1], [1]] #2차원
arr3 = np.array(c)
print(arr3)
#[[[1]
# [1]
# [1]]
# [[1]
# [1]
# [1]]]
arr1은 설명안하겠다.
arr1.ndim은 ndim이 arr1의 차원 수를 물어보는 것이므로 a는 배열이 1개(쉽게 생각하면 가장 바깥쪽 [가 1개)이므로 1차원이다.
arr1.shape는 python의 튜플로 출력한다.
tuple은 list와 유사한 자료구조이고 리스트와 달리 read only의 기능만 구현한다.
그래서 shape는 차원수와 각차원의 요소개수를 동시에 출력한다.
arr1.shape은 1차원이고 4개의 요소를 가지고 있으므로 (4, )라고만 출력된다. (대충 (행,열) 표현한다 생각하면된다)
// 여기서 (4)의 괄호랑 헷갈리면 안된다. (4)는 연산자 우선순위의 괄호이고 (ex. (1+3)*4의 우선순위 괄호) (4,)와는 전혀 다른 뜻이다.
예시로 arr2 = np.array([[1,2,3], [4,5,6]])을 shape로 나타내면 (2, 3)로 표현된다.
c는 위에서 말했듯이 제일 바깥쪽 [가 3개이므로 3차원 [[면 2차원 [면 1차원이다
데이터 타입 바꿔보기
arr = np.array([1, 2.5, 3.4, 4.2, 5.8]) #[1. 2.5 3.4 4.2 5.8]
print(arr)
# arr.astype(np.float32) #뒤의 숫자 32는 32비트를 뜻한다
arr1 = arr.astype(np.int32) # 소수점 이하는 버림처리 #astype은 데이터 타입 변환 기억하기!!
print(arr1)
ndarray는 위에서 말했듯이 모든 요소가 같은 데이터 타입을 갖는다.
그러므로 출력될때도 1이 1. 으로 출력된다. (0은 생략)
astype으로 데이터 타입을 변경할 수 있다.
arr는 현재 float로 이루어져있으니 int로 변경하게 되면 뒤에 소수점 이하는 모두 버리고 출력된다.
그러므로 [1 2 3 4 5]로 출력된다.
다른 방식으로 ndarray를 만들기
arr1 = np.zeros((3, 4)) #()에는 shape를 꼭 명시해줘야한다
print(arr1)
# zeros는 0으로 채우고 ones는 1로 채운다
arr2 = np.ones((2, 3))
print(arr2)
# full로 하면 원하는 숫자로 채울 수 있다(zeros와 ones는 기본으로 실수 값이 들어가지만, full부터는 정수이다.)
arr3 = np.full((2,3), 4, dtype=np.float32)
print(arr3)
제공되는 함수를 이용해서 ndarray를 만들 수 있다.
함수는 zeros와 ones, full이 있다.
zeros, ones는 이름에서 알겠듯이 0과 1로 채워진 배열을 만들어준다.
대신에 shape 즉 행과 열을 반드시 입력해줘야한다.
arr1은 [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]
arr2는 [[1. 1. 1.] [1. 1. 1.]] 이렇게 출력된다.
full은 shape를 입력해주고 그다음에 연속으로 들어갈 숫자인 4를 입력해줬다. 뒤에는 dtype으로 데이터 타입을 입력해준다.
위에 zeros와 ones에서 .이 붙으면서 실수 처리를 한것을 보면 알겠듯이 대부분의 데이터는 무조건 실수를 사용하기 때문에 full에는 dtype을 실수로 정의해주는것이 좋다.
'Python' 카테고리의 다른 글
(1) Pycharm에서 Flask 사용하기 (2) | 2023.11.22 |
---|---|
딥러닝 - 이미지 데이터 전처리 및 학습(2) (2) | 2023.11.02 |
딥러닝 - 이미지 데이터 전처리 및 학습(1) (0) | 2023.11.02 |
Anaconda 사용해서 python 사용하기 (2) | 2023.11.01 |
Numpy 기본 설명 2(복습용으로 적는 설명) (2) | 2023.10.31 |