관리 메뉴

IT journey

Python-배열 3편 본문

개인공부공간/Python

Python-배열 3편

step 2021. 6. 18. 22:21
728x90
반응형

직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요 :)

※ 도움이 될 만한 포스팅

참고로, 최근 포스팅 순서대로 정리해두었습니다.

Python-배열 2편

Python- 리스트, 튜플/ 배열 1편

Python - 내장함수 2편과 이터레이터,제너레이터,코루틴,정규표현식

Python - 모듈(외장함수) 2편(feat.파일 입출력과 추상클래스...)

Python - 설치없이 이용하기,실행, 사용법

Python - 모듈(외장함수) 1편

Python - 클래스 2편

Python - 클래스 1편

Python-함수

Python - 제어문

Python-자료형(사전형,집합)

Python-자료형(리스트,튜플)

Python - 자료형 (숫자형,문자열,불린형)

Python - 내장함수 1편

728x90

배열 연결(concatenate)

(1) hstack

이때 h는 행을 말하며, 행의 수가 같은 두 개 이상의 배열을 옆으로 연결하여 열의 수가 더 많은 배열을 만듭니다. 또한 연결할 배열은 하나의 리스트에 담아야 합니다.

(2) vstack

이때 v는 열을 말하며, 열의 수가 같은 두 개 이상의 배열을 위, 아래로 연결하여 행의 수가 더 많은 배열을 만듭니다. 또한 연결할 배열은 하나의 리스트에 담아야 합니다.

(3) dstack

이 때 d는 깊이를 말하며, 행과 열이 같은 두 개 이상의 배열을 깊이 방향으로 배열을 합칩니다.

(4) stack

dstack의 확장 버전으로, 배열들의 크기가 모두 같아야 합니다. 인수로 axis를 사용할 수 있으며, 기본 값(디폴트)값은 axis=0입니다.

(5) r_ 메소드

hstack과 비슷한 명령으로, 배열을 좌우로 연결합니다. 인덱싱처럼 대괄호([])을 이용합니다.

참고로, r_메소드와 같은 특수 메소드를 인덱서(indexer)라고 합니다.

(6) c_메소드

배열의 차원을 증가시킨 후 좌우로 연결합니다. 

1차원 배열을 연결하게 되는 예를 생각해보게 되면 2차원 배열이 된다는 것을 알 수 있습니다.

(7) tile

동일한 배열을 반복해서 연결할 때 사용합니다.

import numpy as np
a = np.array([[70,80],[110,120]]) 
b = np.array([[1,2,3],[4,5,6]])
np.hstack([a,b])
c = np.array([[10,20,30]])
np.vstack([b,c])
d = np.array([[10,11,12],[13,14,15]])
np.dstack([b,d])
np.dstack([b,d]).shape
np.stack([b,d],axis=0) #깊이(면) 
np.stack([b,d],axis=1) #행
np.stack([b,d],axis=2) #열
np.column_stack([b,d]) #열로 추가
np.r_[b,d]
np.c_[b,d]
np.tile(a,2)
np.tile(a,(2,4))

차원 축소 연산(dimension reduction)

○ 정의

2차원 배열인 행렬의 하나의 행에 있는 원소들을 하나의 데이터 집합으로 보았을 때, 그 집합의 *연산을 구하면 각 행에 대한 하나의 숫자가 나오게 되는데 이러한 연산을 차원 축소 연산이라고 합니다.

○ 2차원 이상의 배열일 경우에는 axis 인수를 넣어 원하는 면,행,열의 차원 축소연산을 할 수 있습니다.

2차원 배열일 경우에는 axis=0이 열이고, axis=1은 행입니다.

3차원 배열일 경우에는 axis=0이 면, axis=1이 행, axis=2가 열입니다.

*참고로, 연산 관련 메소드는 아래와 같습니다.

max 최대 argmax 최대값의 위치
min 최소 argmin 최소값의 위치
sum mean 평균
median 중앙값 var 분산
std 표준편차    
all 배열의 모든 원소가 True인지 평가하는 메소드 any 배열의 1개 이상의 원소가 True인지 평가하는 메소드

○ 예

import numpy as np
a = np.array([13,4,110,70])
np.min(a)
np.argmin(a)
np.max(a)
np.argmax(a)
np.sum(a)
np.mean(a)
np.median(a)
np.var(a)
np.std(a)
np.all([True,False,True,False])
np.any([True,False,True,False])
#axis 인수를 적용한 예
print(b.min(axis=0)) #열 중에 최소값 반환
print(b.min(axis=1)) #행 중에 최소값 반환

 

*참고로, 차원 축소 연산 관련 메소드에서 간략히 알아본 통계 함수(max,min,sum,median,std,var,mean,std)에 대한 설명을 덧붙이겠습니다.

Numpy 기술 통계(descriptive statistics)

▶ 데이터 개수를 알아보는 함수 -> len(x)

▶ (샘플) 평균을 알아보는 함수 -> mean(x)

이에 대한 수학 수식은 아래와 같습니다.

▶ 분산을 알아보는 함수 -> var(x)

데이터와 샘플 평균 간의 거리의 제곱의 평균입니다. 이 값이 작다면 데이터가 모여있다는 것을 알 수 있고, 크다면 데이터가 흩어져 있다는 것을 알 수 있습니다.

이에 대한 수학 수식은 아래와 같습니다.

▶ 표준편차를 알아보는 함수 -> std(x)

이에 대한 수학 수식은 아래와 같습니다.

▶ 최댓값을 알아보는 함수 -> max(x)

▶ 최소값을 알아보는 함수 -> min(x)

▶ 중앙값을 알아보는 함수 -> median(x)

데이터를 크기대로 정렬 했을 때 가장 가운데에 있는 수를 의미합니다.

데이터 개수가 짝수일때는 중앙의 두 수의 평균을 사용합니다.

▶ 사분위수(Quartile)를 알아보는 함수

-> 최소값 percentile(x,0)

-> 1사분위 수 percentile(x,25)

-> 2사분위 수 percentile(x,50)

-> 3사분위 수 percentile(x,75)

-> 최대값 percentile(x,100)

데이터를 크기대로 정렬하였을 때 1/4, 2/4, 3/4 위치에 있는 수를 말하며, 이를 1분위수, 2분위수, 3분위 수라 말합니다. 이 방법 외에도 위치를 1/100 단위로 나눈 백분위 수를 사용하기도 합니다. 이 때 1분위 수는 25%, 2분위 수는 50%, 3분위 수는 75% 입니다.


정렬

○ 2차원 이상의 배열일 경우에는 axis 인수를 넣어 원하는 면,행,열의 정렬을 할 수 있습니다.

2차원 배열일 경우에는 axis=0이 열이고, axis=1은 행입니다.

3차원 배열일 경우에는 axis=0이 면, axis=1이 행, axis=2가 열입니다.

○ sort는 자료를 정렬할 때 쓰고, argsort는 순서를 알고 싶을 때 씁니다.

○ 예

import numpy as np
x=np.array([[5,6,2,1],[4,8,9,1],[20,8,10,1]]) #2차원 배열
np.sort(x)
np.sort(x,axis=0)
np.sort(x,axis=1)
np.argsort(x)

 

728x90
반응형
Comments