Lesson 05: numpy 공부 1단계 ~ 2단계
import
넘파이 공부 1단계
선언
기본연산 브로드캐스팅
기타수학연산지원
(array([ 2.71828183, 7.3890561 , 20.08553692]),
array([ 2.71828183, 7.3890561 , 20.08553692]))
넘파이 공부 2단계
인덱싱 1차원
- 선언
- 인덱스로 접근
- : 이용 (슬라이싱)
- 정수배열에 의한 인덱싱
- 부울값에 의한 인덱싱
응용하면?
리스트는 불가능
인덱싱 2차원
- 중첩리스트와 2차원 np.array 선언
- A의 원소 인덱싱
- A2의 원소 인덱싱
- A2에서만 되는 기술 (넘파이에서 제시하는 신기술, R에서는 기본적으로 쓰던것, 이중list는 불가능)
- 정수배열에 의한 인덱싱 & 슬라이싱!
1차원 배열의 선언
- 리스트나 튜플을 선언하고 형변환
- range()를 이용해서 선언하고 형변환
- np.zeros, np.ones
- np.linspace
array([0. , 0.09090909, 0.18181818, 0.27272727, 0.36363636,
0.45454545, 0.54545455, 0.63636364, 0.72727273, 0.81818182,
0.90909091, 1. ])
- np.arange
reshape
- reshape: ndarray의 특수한 기능
note: reshape은 a자체를 변화시키는것은 아님
- 다시 b를 a처럼 바꾸고 싶다
- reshape with -1
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]])
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23]])
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17],
[18, 19, 20],
[21, 22, 23]])
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15],
[16, 17],
[18, 19],
[20, 21],
[22, 23]])
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15],
[16, 17],
[18, 19],
[20, 21],
[22, 23]])
2차원 배열의 선언
랜덤으로 배열 생성
array([ 0.27184979, -0.4540305 , 0.24538219, -3.11389327, 1.06478234,
0.12051154, 0.01503231, -0.06744028, 2.30710253, 0.78840453])
array([0.67729671, 0.19584606, 0.4564896 , 0.9308976 , 0.49080792,
0.03410752, 0.47480477, 0.44519947, 0.20608611, 0.85576604])
array([[-0.97378852, 0.5250826 ],
[-0.97400213, -0.59600022]])
행렬관련기능
차원
- 넘파이배열의 차원은 .shape 으로 확인가능
- 아래는 모두 미묘하게 다르다.
Quiz
1. shape이 ()인 numpy array를 만들어라. (즉 차원이 0인 np.array를 만들어라)
2 a의 모든 원소에 1을 더하는 코드를 작성하라. (numpy를 이용할것)
3 아래와 같은 수열을 생생성하라.
0,1,2,3,4,5,...,99
위의 수열에서 1,4,7,10,13,… 번째의 원소를 뽑아서 아래와 같은 수열을 만들어라. (첫번째 원소는 0이다)
0,3,6,9,12,...,93,96,99
4. shape이 (5,5)인 단위행렬을 만들어라.
5. numpy를 이용하여 아래의 역행렬을 구하라.
\[\begin{bmatrix} 1& 0 \\ 0& 3 \end{bmatrix}\]
6. 본인의 생년월일로 랜덤시드를 설정하고 표준정규분포에서 1000개의 난수를 생성하라.
7. 6의 결과로 나온 1000개의 난수중 1.96보다 크거나 -1.96보다 작은 작은값은 모두 몇개인가?
8. 아래와 같은 배열을 선언하라.
차원의 수를 유지하면서 1열을 추출하는 코드를 작성하라. 즉 결과가 아래와 같이 나오도록 하라.
array([[0],
[4],
[8]])
9. 아래의 코드를 관찰하라.
a에서 20,21,22는 각각 몇개씩 있는가?
note 공부를 위하여 np.random.randint()의 기능을 chatGPT등으로 확인해 볼 것
10. 아래의 코드를 관찰하라.
[[True, False, False, False, False],
[False, True, False, False, False],
[False, False, True, False, False],
[False, False, False, True, False],
[False, False, False, False, True]]
lst를 이용하여 shape이 (5,5)인 단위행렬을 만들어라.
array([[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]])
12. 적당한 코드를 이용하여 아래와 같은 리스트를 생성하라.
이를 이용하여 아래와 같은 행렬을 선언하라.
13. 적당한 코드를 이용하여 아래와 같은 행렬을 선언하라.
array([[1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 1, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1]])
14. 성공확률이 45%인 시행을 100번 반복하여 성공하면 True, 실패하면 False를 기록하는 난수열을 생성하라.
hint: