실습문제
import numpy as np
# 이름, 학번, 성적 들어간 배열 생성
x = np.array(['이지헌', 20011266, 2.1,
'이승하', 22012312, 3.5,
'노주호', 22012414, 4.1,
'사예진', 21032121, 3.1,
'이준영', 20032132, 3.8,
'이주호', 19321327, 1.9,
'노지헌', 21052136, 2.7,
'이예진', 18032132, 3.8,
'노승하', 23164723, 0.8,
'사준영', 19357213, 4.5]).astype(str).reshape(-1, 3)
# F학점을 받은 학생의 인덱스를 리스트로 구함.
f = list()
for row in range(x.shape[0]):
if float(x[row][2]) < 2.0:
f.append(row)
# F학점을 받은 학생의 인덱스를 통해 해당 학생 지움
noF = np.delete(x, f, axis=0)
# argsort()를 활용해 성적순으로 나열했을 때 (오름차순) 새로운 배열의 행이 원래 행의 인덱스가 몇이였는지 알아냄
byGradeIndices = np.argsort(noF, axis=0)
# byGradeIndices을 통해 얻은 재배열 순서로 noF 재배열
tmp = [noF[byGradeIndices[i][2]] for i in range(noF.shape[0])]
byGradeArray = np.array(tmp)[::-1] # 저장된 배열의 행을 역방향으로 재배열 해 성적이 내림차순으로 보이게 바꿈
print(byGradeArray)
Astudent = list()
Bstudent = list()
Cstudent = list()
# 각 학들의 성적을 확인해 성적에 따라 학생 정보가 저장 된 행을 다른 리스트에 저장
for row in byGradeArray:
if float(row[2]) >= 4.0:
Astudent.append(row)
elif 3.0 <= float(row[2]) < 4.0:
Bstudent.append(row)
else:
Cstudent.append(row)
# 저장 된 리스트를 ndarray로 변환 후 출력
Astudent, Bstudent, Cstudent = np.array(
Astudent), np.array(Bstudent), np.array(Cstudent)
print(Astudent)
print(Bstudent)
print(Cstudent)
이론문제
- x, axis를 통하여 원하는 축을 결정할 수 있기에 2차원 배열의 행, 열 둘 다 삭제가능
- o
- x, 차원의 저주 현상으로 차원이 증가할 수록 데이터간 공간이 많아져 학습의 효율이 떨어진다.
- x, (2,3,4)모양의 배열이 출력된다.
- o
- x
올바른 코드
import numpy as np
Z = np.ones((10,10))
Z[1:-1, 1:-1] = 0
print(Z)