FUNDAMENTAL | 07-1. Array, NumPy
210915
1. 배열, 통계 데이터
-
평균은 입력 받은 값의 합산을 통해 바로 구할 수 있지만, 표준편차와 분산을 구하기 위해서는 입력받은 모든 숫자들을 저장해둘 필요가 있다.
-
데이터 값 전체를 하나의 객체에 순서대로 모아 놓을 수 있어야 사용하기 편리하다.
-
파이썬의 리스트는 임의의 데이터 타입을 담을 수 있는 가변적 연속열(Sequence)형.
즉, 파이썬 리스트는 동적 배열(Dynamic Array)
List vs Array
- list는 별도의 import가 필요없지만 array를 사용하기 위해서는 import 필요
- 파이썬에서 array는 built-in 아니다.
-
list 안의 element 사이에 다른 타입의 자료형이 허용.
array는 처음부터 element의 유형을 지정.
지정되지 않은 다른 타입의 element 추가가 허용되지 않음 -
array는 element들이 연속된 메모리 공간에 배치되며,
모든 element들의 동일한 크기와 타입을 가져야 함
시그마 표현
for문
,range()
,len() 함수
활용
total = 0.0
for i in range(len(X)):
total = total + X[i]
mean = total / len(X)
print('sum of X: ', total)
중앙값(median)
주어진 숫자를 크기 순서대로 배치할 때 가장 중앙에 위치하는 숫자
-
n이 홀수
- 중앙값: n/2을 반올림한 순서의 값
-
n이 짝수
- 중앙값: n/2번째 값과 ((n/2) + 1) 번째 값의 평균
전체 코드 main()
# 값 입력 받기
def numbers():
X=[]
while True:
number = input("Enter a number (<Enter key> to quit)")
while number !="":
try:
x = float(number)
X.append(x)
except ValueError:
print('>>> NOT a number! Ignored..')
number = input("Enter a number (<Enter key> to quit)")
if len(X) > 1:
return X
# 중앙 값 구하기
def median(nums):
nums.sort()
size = len(nums)
p = size // 2
if size % 2 == 0:
pr = p
pl = p-1
mid = float((nums[pl]+nums[pr])/2)
else:
mid = nums[p]
return mid
# 평균 구하기
def means(nums):
total = 0.0
for i in range(len(nums)):
total = total + nums[i]
return total / len(nums)
# 표준편차 구하기
def std_dev(nums, avg):
texp = 0.0
for i in range(len(nums)):
texp = texp + (nums[i] - avg) ** 2
return (texp/(len(nums)-1)) ** 0.5
def main():
X = numbers()
med = median(X)
avg = means(X)
std = std_dev(X, avg)
print("당신이 입력한 숫자{}의 ".format(X))
print("중앙값은{}, 평균은{}, 표준편차는{}입니다.".format(med, avg, std))
if __name__ == '__main__':
main()
2. NumPy(Numerical Python)
과학계산용 고성능 컴퓨팅과 데이터 분석에 필요한 파이썬 패키지
# 설치하기
pip install numpy
NumPy의 특징
-
빠르고 메모리를 효율적으로 사용하여 벡터의 산술연산과 브로드캐스팅 연산을 지원하는 다차원 배열 ndarray 데이터 타입을 지원.
-
반복문을 작성할 필요 없이 전체 데이터 배열에 대해 빠른 연산을 제공하는 다양한 표준 수학 함수를 제공.
-
배열 데이터를 디스크에 쓰거나 읽을 수 있다. (즉, 파일로 저장한다는 뜻)
-
선형대수, 난수발생기, 푸리에 변환 가능, C/C++ 포트란으로 쓰여진 코드를 통합.
ndarray
NumPy를 사용하기 위해선,
ndarray
객체를 만들어야 한다.
파이썬에서 사용하는 대규모 데이터 집합을n차원 배열
로 담을 수 있다.
arange()
, array([])
# 아래 A와 B는 결과적으로 같은 ndarray 객체를 생성합니다.
A = np.arange(5)
B = np.array([0,1,2,3,4]) # 파이썬 리스트를 numpy ndarray로 변환
C = np.array([0,1,2,3,'4'])
# ['0' '1' '2' '3' '4'] 결과 반환
# 모든 element의 type이 동일해야하기 때문에
크기(size, shape,ndim)
size
: 행렬 내 원소의 개수 / ndarray.size
shape
: 행렬의 모양 / ndarray.shape
ndim
: 행렬의 축(axis)의 개수 / ndarray.ndim
reshape()
: 메소드는 행렬의 모양를 바꿔줌.
모양을 바꾸기 전후 행렬의 총 원소 개수(size)가 맞아야 함.
# 길이 10의 1차원 행렬을 2X5 2차원 행렬로 변경
A = np.arange(10).reshape(2,5)
type
type()
과 dtype()
메소드 구분하기 !!
-
NumPy: numpy.array.dtype
- NumPy의 원소는 꼭 동일한 데이터 type이어야 함
- NumPy ndarray의 "원소"의 데이터타입을 반환
- 필요에 따라 가장 효율적인 방법으로 type을 변화시켜 관리
-
파이썬: type()
- 자료형이 반환
특수행렬
NumPy는 수학적으로 의미가 있는 행렬들을 함수로 제공
단위행렬, 0 행렬, 1 행렬
# 단위행렬
np.eye(3)
# 0 행렬
np.zeros([2,3])
# 1행렬
np.ones([3,3])
브로드캐스트(broadcast)
ndarray와 상수, 또는 서로 크기가 다른 ndarray끼리 산술연산이 가능한 기능
# 행렬A 생성
A = np.arange(9).reshape(3,3)
# ndarray A에 2를 상수배 했을 때,
A * 2
# ndarray A에 2를 더했을 때,
A + 2
# 3 X 3 행렬에 1 X 3 행렬을 더했을 때
A = np.arange(9).reshape(3,3)
B = np.array([1, 2, 3])
print(A)
print(B)
A+B
# 3 X 3 행렬에 3 X 1 행렬을 더했을 때
A = np.arange(9).reshape(3,3)
C = np.array([[1], [2], [3]])
print(A)
print(C)
A+C
슬라이스와 인덱싱
출처: AIFFEL FUNDAMENTAL_ 7. Data 어떻게 표현하면 좋을까? 배열(array)과 표(table)
# 행렬 A
# A[행 범위, 열 범위]와 같이 표기
A[:,-1]
print(A[:,2:])
random
np.random.randint()
np.random.choice()
np.random.permutation()
np.random.normal()
np.random.uniform()
# 의사 난수를 생성하는 예제입니다. 여러번 실행해 보세요.
print(np.random.random()) # 0에서 1사이의 실수형 난수 하나를 생성합니다.
print(np.random.randint(0,10)) # 0~9 사이 1개 정수형 난수 하나를 생성합니다.
print(np.random.choice([0,1,2,3,4,5,6,7,8,9])) # 리스트에 주어진 값 중 하나를 랜덤하게 골라줍니다.
전치행렬
행렬의 행과 열을 맞바꾸기, 행렬의 축을 서로 바꾸기 등에 사용되는 기능들
arr.T
,np.transpose
NumPy로 통계 데이터 계산하기
import numpy as np
# 위 정리에서 사용하였던 함수.
def numbers():
X = []
number = input("Enter a number (<Enter key> to quit)")
# 하지만 2개 이상의 숫자를 받아야 한다는 제약조건을 제외하였습니다.
while number != "":
try:
x = float(number)
X.append(x)
except ValueError:
print('>>> NOT a number! Ignored..')
number = input("Enter a number (<Enter key> to quit)")
return X
def main():
nums = numbers() # 파이썬 리스트.
num = np.array(nums) # 리스트를 Numpy ndarray로 변환.
print("합", num.sum())
print("평균값",num.mean())
print("표준편차",num.std())
print("중앙값",np.median(num)) # num.median() 이 아님에 유의.
main()
Author And Source
이 문제에 관하여(FUNDAMENTAL | 07-1. Array, NumPy), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@tjddus0302/FUNDAMENTAL-07-1.-Array-NumPy저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)