실습문제

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)

이론문제

  1. x, axis를 통하여 원하는 축을 결정할 수 있기에 2차원 배열의 행, 열 둘 다 삭제가능
  2. o
  3. x, 차원의 저주 현상으로 차원이 증가할 수록 데이터간 공간이 많아져 학습의 효율이 떨어진다.
  4. x, (2,3,4)모양의 배열이 출력된다.
  5. o
  6. x 올바른 코드
import numpy as np

Z = np.ones((10,10))
Z[1:-1, 1:-1] = 0
print(Z)