travel data science
[Numpy] 2. 배열 생성 및 차원 변경, random함수, 통계(중앙값, 평균, 합계, 평균), 정렬 (2주차 스터디) 본문
[Numpy] 2. 배열 생성 및 차원 변경, random함수, 통계(중앙값, 평균, 합계, 평균), 정렬 (2주차 스터디)
가방이 2021. 7. 28. 21:46* array생성
np.arange(시작, 끝, 간격)
np.linspace(시작, 끝, num=생성 갯수)
np.logspace(시작, 끝, num=생성 갯수) #linspace와 다른 점은 log를 쓰기 때문에 지수 형태(e+100같은..)로 나타난다.
* array의 길이, 차원 등 확인 및 재배열
a=np.arange([[1, 2, 3], [4, 5, 6]])
a=a.reshape(1, 2, 3)
# [[[1, 2, 3], [4, 5, 6]]] => 차원, shape변경
* 1차원으로 변경
a=a.ravel()
a=a.flatten()
* numpy에서 사용하는 random함수
b=np.random.seed(100) #seed는 변수를 생성하는 것은 아니고 라디오 주파수라고 생각, 같은 seed번호에서 random한 변수 생성시 같은 숫자 배열만 나타나는 경향이 있음.
b=np.random.randint(생성 범위) #생성 범위 중 하나만 추출
b=np.random.rand(생성갯수) #0~1정규분포 난수
b=np.random.randn(생성갯수) #평균 0, 표준편차 1의 가우시안 표준정규분포 난수
* 평균, 중앙값, 합계 계산하기
np.mean(a) #평균
np.sum(a) #합계
np.median(a) #중앙값
*argsort()사용하기
a=np.array([10, 8, 1, 2])
s=a.argsort() => [2, 3, 1, 0] #정렬을 하고, 원래 index를 가져옴
a를 제대로 출력하고 싶으면
a[s]를 출력하면 됨.
* 예제 문제 풀기
import pandas as pd
import numpy as np
def print_score(array1, array2):
print("---------------------------------------------------------------------------")
print("{:<8}{:<8}{:<8}{:<8}{:<8}{:<8}{:<8}".format('번호', '국어', '수학', '영어', '총점', '평균', '환산'))
print("---------------------------------------------------------------------------")
argsort_array=array1[:,0].argsort()
array1=array1[argsort_array]
for i in array1:
a, b, c, d, e, f, g=i
print("{:<10}{:<10}{:<10}{:<10}{:<10}{:<10}{:<10}".format(a, b, c, d, e, f, g))
array_max=np.max(array2, axis=0)
array_min=np.min(array2, axis=0)
print("{:<6}{:<10}{:<10}{:<10}".format('최고점수', array_max[0], array_max[1], array_max[2]))
print("{:<6}{:<10}{:<10}{:<10}".format('최저점수', array_min[0], array_min[1], array_min[2]))
def grade(array):
mean=np.mean(array)
if mean >= 90:
grade="A"
elif mean>=80:
grade="B"
elif mean>=70:
grade="C"
elif mean>=60:
grade="D"
else:
grade="F"
return grade
def isint(x):
list=[]
result=x
for i in range(0, 101):
list.append(str(i))
if x not in list:
result=input("1~100 사이 점수로 다시 입력하시오: ")
result=isint(result)
return result
def is10int(array, x):
list=[]
result=x
for i in range(0, 10):
list.append(str(i))
if x not in list:
result=input("0~10 사이로 다시 입력하시오: ")
result=is10int(array, result)
''''''
if array.shape[1]==0:
return result
elif x in array[:,0]:
result=input("이미 입력된 학번입니다. 다시 입력해주세요: ")
result=is10int(array, result)
return result
print("===========")
print("==피식 고등학교 성적처리 프로그램==")
print("===========")
print("1. 성적입력")
print("2. 성적현황")
print("3. 종료")
print("===========")
list_all=[]
list_scores=[]
array_student=np.array([[]])
while True:
status=input(" > ")
print("===========")
if status=="1":
print("학생 성적 입력")
print("===========")
num=input("학번: ")
num=int(is10int(array_student, num))
score_korean=input(f"{num}의 국어 점수: ")
score_korean=int(isint(score_korean))
score_math=input(f"{num}의 수학 점수: ")
score_math=int(isint(score_math))
score_english=(input(f"{num}의 영어 점수: "))
score_english=int(isint(score_english))
list_score=[[score_korean, score_math, score_english]]
array_score=np.array(list_score)
list_student=[[num, score_korean, score_math, score_english, np.sum(array_score), round(np.mean(array_score), 2), grade(array_score)]]
save_point=input(f"{num}의 점수를 저장하시겠습니까(y/n)? => ")
if save_point=="y"or save_point=="Y":
list_all=list_all+list_student
list_scores=list_scores+list_score
array_student=np.array(list_all)
array_scores=np.array(list_scores)
print(f"--> 학생 ({num})의 점수 합계는 {list_student[0][4]}점, 평균은 {round(list_student[0][5], 2)}입니다.")
print("===========")
elif status=="2":
print_score(array_student, array_scores)
elif status=="3":
print("종료합니다.")
print("==========")
break
else:
print("1, 2, 3 중에서 입력해주세요")
'Python study' 카테고리의 다른 글
백준 11022번 (0) | 2021.10.03 |
---|---|
백준 15552번 (0) | 2021.10.03 |
재귀호출 알고리즘 (0) | 2021.09.30 |
[python basic] 3. 데이터 타입과 컬렉션 (0) | 2021.09.02 |
[Numpy] 1.Numpy기초와 인덱싱 (1주차 스터디) (0) | 2021.07.05 |