Repository navigation
Expand file tree
/
Copy patharrayEx2.py
More file actions
56 lines (43 loc) · 2.09 KB
/
Copy patharrayEx2.py
File metadata and controls
56 lines (43 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# 인덱싱과 슬라이싱 — 리스트와 비슷하지만 더 강력합니다
import numpy as np
a = np.array([10, 20, 30, 40, 50])
print('========== 1차원 : 리스트와 같다 ==========')
print(a[0], a[-1])
print(a[1:4])
print(a[::-1])
print('\n========== 2차원 : [행, 열] 로 한 번에 ==========')
b = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(b)
print('b[1][2] =', b[1][2]) # 리스트 방식도 되지만
print('b[1, 2] =', b[1, 2]) # 이게 넘파이 방식 (더 빠르다)
print('1행 전체 :', b[1])
print('1열 전체 :', b[:, 1]) # ← 리스트로는 for 문을 돌려야 했다
print('부분 블록 :\n', b[0:2, 1:3])
print('\n========== 불리언 인덱싱 : 조건으로 고르기 ==========')
scores = np.array([85, 45, 92, 68, 73, 55])
mask = scores >= 60 # 조건을 걸면 True/False 배열이 나온다
print('조건 결과 :', mask)
print('통과한 값 :', scores[mask])
print('한 줄로 :', scores[scores >= 60])
print('개수 :', (scores >= 60).sum()) # True 는 1로 세어진다
print('비율 :', (scores >= 60).mean())
print('여러 조건 :', scores[(scores >= 60) & (scores < 90)])
# and / or 가 아니라 & / | 를 쓰고, 각 조건을 괄호로 묶어야 합니다
print('\n========== where : 조건에 따라 다른 값 ==========')
print(np.where(scores >= 60, '합격', '불합격'))
# step05 컴프리헨션의 ['합격' if s>=60 else '불합격' for s in scores] 와 같다
print('\n========== 값 한꺼번에 바꾸기 ==========')
c = scores.copy() # copy() 없이 대입하면 원본이 바뀐다 (step05 복사의 함정)
c[c < 60] = 60 # 60 미만을 전부 60으로
print(c)
print('\n========== 뷰 vs 복사 ==========')
d = np.array([1, 2, 3, 4, 5])
view = d[1:4] # 슬라이싱은 '뷰' — 원본과 메모리를 공유한다
view[0] = 999
print('원본이 바뀐다 :', d) # 리스트 슬라이싱은 복사였는데 넘파이는 다르다!
e = np.array([1, 2, 3, 4, 5])
copy = e[1:4].copy()
copy[0] = 999
print('copy 는 안전 :', e)