Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Chap4 #다항회귀 #PolynomialRegression #ML #머신러닝
- Chap4 #ML #배치경사하강법 #경사하강법 #핸즈온머신러닝 #핸즈온
- 티스토리 #수학수식 #수학수식입력 #티스토리블로그 #수식입력
- python #파이썬 #pandas #dataframe #dataframe생성 #valueerror
- Chap4
- 키워드추출 #그래프기반순위알고리즘 #RandomSurferModel #MarcovChain #TextRank #TopicRank #EmbedRank
- Chap4 #핸즈온머신러닝 #머신러닝 #핸즈온머신러닝연습문제
- ML #핸즈온머신러닝 #학습곡선 #편향분산트레이드오프
- adp #데이터분석전문가 #데이터분석자격증 #adp후기 #adp필기
- 티스토리블로그 #티스토리 #PDF #블로그PDF저장
- 객체의종류 #리스트 #튜플 #딕셔너리 #집합 #Python #파이썬 #list #tuple #dictionary #set
- Chap4 #릿지회귀 #정규방정식 #확률적경사하강법 #SGD #규제가있는선형모델
- 선형회귀 #정규방정식 #계산복잡도 #LinearRegression #Python #ML
- 경사하강법 #핸즈온머신러닝 #머신러닝 #ML
- 인덱싱 #슬라이싱 #python #파이썬 #수정및삭제 #원소의수정 #객체의함수 #keys#values#items#get#len#append#sort#sorted
- 파이썬 #Python #가상환경 #anaconda #python설치 #python가상환경
- 핸즈온머신러닝 #handson
- python #dataframe #파생변수 #map #lambda #mapping
- Chap4 #ML #미니배치경사하강법 #경사하강법 #머신러닝 #핸즈온머신러닝
- IDE #spyder
- 라쏘회귀 #엘라스틱넷 #조기종료
- 확률적경사하강법 #경사하강법 #머신러닝 #선형회귀 #ML #Chap4
Archives
- Today
- Total
StudyStudyStudyEveryday
[Python] Numpy - array 생성 / 인덱싱과 슬라이싱 / 함수 및 메서드 본문
Numpy
- 수치 연산을 위한 라이브러리
- 벡터, 행렬 등 수학 연산에 필요한 다양한 객체 및 기능 제공
- C언어로 작성되어 효율적으로 계산됨
anaconda prompt에서 numpy를 설치하는 명령어는 다음과 같다.
conda install numpy
1-D array 생성
1-D array는 선형대수에서 벡터로 생각할 수 있다.
import numpy as np
import pandas as pd
x = np.array([1, 2, 3])
y = np.array((1, 2, 3))
z = np.zeros(4) # 0 4개로 구성된 array 생성
u = np.ones(5) # 1 4개로 구성된 array 생성
# [0, 1)의 uniform dist에서 random하게 3개의 수 추출
q = np.random.rand(3)
# standard normal dist에서 random하게 4개의 수 추출
w = np.random.randn(4)
# [-1, 1]사이 uniform dist에서 10개의 수 추출
Q = np.random.uniform(-1, 1, 10)
# 평균 10, 표준편차 1인 정규분포에서 20개의 수 추출
W = np.random.normal(10, 1, 20)
# (maximum - minimum) * x + minimum
(W - W.min()) / (W.max() - W.min())
# 0부터 9까지 총 10개의 정수 추출
r1 = np.arange(10)
# 1부터 10까지 2 간격으로 수 추출
r2 = np.arange(1, 10, 2)
v = np.linspace(1, 10, num=3)
2-D array 생성
2-D array는 행렬로 생각하면 된다.
X = np.array([[1, 2, 3], [4, 5, 6]])
Z = np.ones([4, 4])
R = np.arange(10).reshape(2, 5)
V = np.linspace(1, 10 ,4).reshape(2, 2)
벡터로 생성된 경우 reshape을 이용해 2차원 행렬로 변경시켜줄 수 있다.
N-D array 생성
리스트 혹은 튜플의 중첩 구조 (nested)를 이용하면 더 고차원 array를 생성할 수 있다.
XX = np.array([[[1, 2], [3, 4]],
[[5, 6], [7, 8]]])
YY = np.arange(60).reshape(3, 4, 5)
ZZ = np.random.rand(2, 3, 3)
Indexing and Slicing
대괄호 통해 array의 인덱싱과 슬라이싱이 가능하다.
다만 2차원 이상의 array에서는 콤마(,)를 통해 차원을 구분한다.
# 1-d array
x = np.array([1, 2, 3, 4])
x[:1]
x[-1]
x[1:3]
x[x >= 2] # list추출에서는 이렇게 인덱싱 안 됨
# 2-d array
X = np.array([1, 2, 3], [4, 5, 6])
X[0]
X[1, :]
# 3-d array
XX = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
XX[0, 1, :]
XX[XX > 4]
Numpy 내 유용한 여러 함수들
- np.sort() : array내 원소 정렬
- np.argsort() : 작은 값의 위치부터 출력 (R에서 order함수와 같음)
# 0~10 사이 정수 10개 비복원추출
x = np.random.choice(np.arange(0, 10),
size=10, replace=False)
# ascending
np.sort(x)
# descending
np.sort(x)[::-1]
# 작은 원소의 위치부터 출력 (R에서 order함수와 같음)
np.argsort(x)
x[np.argsort(x)]
# 2-d array X의 행 위치 바꿔주기
X = np.array([[1, 2, 3], [4, 5, 6]])
X[np.argsort(X[:, 0])[::-1], :]
- np.concatenate : array를 합쳐준다.
x = np.arange(0, 5)
y = np.arange(5, 10)
np.concatenate([x, y])
x.shape
X = x[:, np.newaxis] # 차원을 늘려줌으로써 계산이 가능하게 만들어준다.
X = x[:, None]
Y = y[:, None]
np.concatenate([X, Y], axis=0) # 행 방향
np.concatenate([X, Y], axis=1) # 열 방향
- np.reshape() : array 모양 및 차원 바꿔주기
x = np.arange(0, 4)
X = np.reshape(x, (2, 2))
np.reshape(X, [4, 1])
- np.max(), np.min() : 최대값, 최소값 출력
- np.argmax(), np.argmin : 최대값의 위치, 최소값의 위치 출력
X = x.reshape(2, 5)
np.max(X, axis=0) # 행 방향
np.max(X, axis=1) # 열 방향
np.argmax(x) # 최대값의 위치
np.argmin(x) # 최소값의 위치
np.argmax(X, axis=0) # 행 방향 최대값의 위치
np.argmax(X, axis=1) # 열방향 최소값의 위치
- np.repeat(x, 2) : 원소 두 번씩 반복
- np.tile(x, 2) : 동일 array를 두 번 붙여준 효과
np.repeat(x, 2)
Out[118]: array([0, 0, 6, 6, 2, 2, 4, 4, 8, 8, 5, 5, 3, 3, 7, 7, 9, 9, 1, 1])
np.tile(x, 2)
Out[119]: array([0, 6, 2, 4, 8, 5, 3, 7, 9, 1, 0, 6, 2, 4, 8, 5, 3, 7, 9, 1])
Broadcasting
- 두 array의 차원이 맞지 않은 경우, 작은 차원의 array를 반복해여 broadcasting 해준다.
## 1-d array + 상수
x = np.arange(0, 5)
x + 1
Out[10]: array([1, 2, 3, 4, 5])
y = 3
x + y
Out[12]: array([3, 4, 5, 6, 7])
## 2-d array + 1-d array
X = np.arange(0, 4).reshape(2, 2)
x = np.arange(0, 2)
X.shape
Out[15]: (2, 2)
x.shape
Out[16]: (2,)
X + x
Out[17]:
array([[0, 2],
[2, 4]])
Y = x.reshape([2, 1])
X.shape
Out[19]: (2, 2)
X + Y
Out[20]:
array([[0, 1],
[3, 4]])
## n-d array + 1-d array
XX = np.arange(0, 24).reshape(4, 3, 2)
Z = Y.reshape(1, 2)
XX.shape
Out[23]: (4, 3, 2)
Z.shape
Out[24]: (1, 2)
XX + Z
Out[25]:
array([[[ 0, 2],
[ 2, 4],
[ 4, 6]],
[[ 6, 8],
[ 8, 10],
[10, 12]],
[[12, 14],
[14, 16],
[16, 18]],
[[18, 20],
[20, 22],
[22, 24]]])
'Python > 데이터 시각화' 카테고리의 다른 글
[Python] 조건문과 반복문 - if문 / for문 / while문 (0) | 2022.04.17 |
---|---|
[Python] Pandas - series와 dataframe 생성 / 인덱싱과 슬라이싱 / 함수 및 메서드 (0) | 2022.04.17 |
[Python] 인덱싱과 슬라이싱 / 원소의 수정 / 객체의 함수 (0) | 2022.04.12 |
[Python] 객체의 종류(리스트, 튜플, 딕셔너리, 집합) (0) | 2022.04.12 |
[Python] 변수할당 / 자료의 종류 (숫자형, 문자형,논리형) (0) | 2022.04.12 |
Comments