# 데이터 과학을 위한 파이썬 머신러닝 3장 연습문제 풀이

- Author: @laetipark
- Published: 2022-08-26
- Updated: 2023-06-06
- Source: http://blex.me/@laetipark/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99%EC%9D%84-%EC%9C%84%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-3%EC%9E%A5-%EC%97%B0%EC%8A%B5%EB%AC%B8%EC%A0%9C-%ED%92%80%EC%9D%B4
- Tags: 파이썬, 연습문제, 머신러닝, 데이터과학, 한빛아카데미

---

### 연습문제

1. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?

    ```python
    import numpy as np

    test_a = np.array([[4, 8], [2, 9]])
    print(test_a * test_a)
    ```

    - 답 : 1  
    ```
    [[16 64]
     [ 4 81]]
    ```


2. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?

    ```python
    test_a = np.array([[5, 5, 5], [3, 3, 3]])
    print(test_a ** 2)
    ```

    - 답 :  2
    ```
    [[25 25 25]
     [ 9  9  9]]
    ```


3. A = np.array([[3,22,2],[3,1,5]]), B = np.array([[6,7,9],[2,1,3]])일 때,  
다음 중 연산이 실행되지 않고 오류가 발생하는 것은?
    - 답 : 2  
    - 설명 : 행, 열이 같은 행렬끼리는 계산이 되지 않음


4. 다음 수식을 나타내는 넘파이 코드를 작성하고자 한다.  
다음 코드 중 결과가 다른 것을 하나 찾으시오.  
![](https://static.blex.me/images/content/2022/8/26/20228261_gztCtWIhoMTeqCUsiVg6.jpg)
    ```
    Y_true = np.array([1, 1, 0, 1, 1])
    Y_pred = np.array([0.23, 0.5, 0.99, 0.69, 0.4])
    ```
    - 답 : 2
    ```
    diff = (Y_true - Y_pred)
    np.sqrt(diff ** 2 / len(Y_true))
    ```
    - 설명 : 넘파이 배열 형태로 출력


5. 다음 코드는 ndarray A의 각 원소들을 평균과 표준편차를 이용하여  
정규분포로 정규화시키는 벡터 연산 코드이다. 빈칸에 알맞은 것을 고르시오.  
![](https://static.blex.me/images/content/2022/8/26/202282617_pV7LxRBa8hCMWkiAwwab.jpg)
    - 답 : 3. mean, std
    ```
    A = np.array([8, 1, 2, 2, 3, 4, 5, 6, 7, 8])
    Z = (A - A.mean(axis=0) / A.std(axis=0))
    print(Z)
    ```


6. 다음 수식을 넘파이로 구현하고자 한다.  
벡터를 입력하여 정규화된 벡터로 나타낼 때,  
수식을 올바른 넘파이 코드로 표현한 것이 아닌 것은 무엇인가?  
![](https://static.blex.me/images/content/2022/8/26/202282618_YavFrTiB5p9ed4Y1ybRA.jpg)

    - 답 : 1
    ```python
    def softmax(x):
       f_x = x.exp / np.sum(x.exp)
       return f_x
    ```
    - 설명 : 에러 발생, 아래와 같이 수정
    ```python
    f_x = np.exp(x) / np.sum(np.exp(x))
    ```


7. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?
    ```python
    test_a = np.arange(1, 10).reshape(3, 3)
    test_b = np.arange(6).reshape(2, 3)

    test_a.dot(test_b.T)
    ```
    - 답 : 4
    ```
    array([[ 8, 26],
           [17, 62],
           [26, 98]])
    ```


8. 다음 중 넘파이 배열의 특징으로 적합한 것을 모두 고르시오.
    - 답 :
    1. C의 데이터 타입을 기본으로 배열이 생성된다. / 3. 하나의 데이터 타입만으로 배열이 생성된다.


9. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?
    ```python
    arr = np.arange(16).reshape(4, 4)
    print(arr.size - arr.shape[0] * arr.ndim)
    ```
    - 답 : 3. 8


10. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?
    ```python
    arr = np.arange(20).reshape(10, 2)
    x, y = arr.shape

    print(arr.reshape(y, x).shape)
    ```
    - 답 : 2. (2, 10)


11. 다음 배열은 벡터이다. 이 배열을 4×6의 행렬로 바꾸려고 할 때 빈칸에 알맞은 것을 고르시오.
    ```python
    arr = np.arange(24)
    ```
    - 답 : 1. reshape(4, 6)
    - 설명 :
    ```python
    arr = arr.reshape(4, 6)
    ```
    ```
    [[ 0  1  2  3  4  5]
     [ 6  7  8  9 10 11]
     [12 13 14 15 16 17]
     [18 19 20 21 22 23]]
    ```


12. 다음 코드를 실행했을 때 결과값이 다른 하나를 고르시오.
    ```
    arr = np.arange(8)
    arr
    ```
    - 답 : 2. arr.reshape(2, -2)
    - 설명 : 2차원 배열 형태로 출력


13. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?
    ```
    arr_1 = np.arange(4)
    arr_2 = np.arange(4, 0, -1)

    np.any(arr_1 < arr_2)
    ```
    - 답 : 2. True


14. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?
    ```
    a = np.arange(6).reshape(2, 3)
    b = a > 4
    a[b]
    ```
    - 답 : 1. array([5])


15. 다음 find_nearest_value 함수는 벡터와 어떤 값을 입력하면  
해당 벡터 값 중 입력된 값과 차이가 가장 작은 값이 반환된다.  
해당 함수로 가장 적합한 코드를 찾으시오.
    ```
    X = np.array([1, 2, 3, 4, 5, 6, 7])
    target_value = 4.3
    find_nearest_value(X, target_value)
    ```
    - 답 : 3
    ```
    def find_nearest_value(X, target_value):
           result = X[np.argmin(np.abs(X - target_value))]
           return result
    ```


16. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?
    ```
    Z = np.array([6, 6, 6, 4, 7, 9, 1, 8, 8, 4])
    Z[Z.argsort()[:5]] = 0
    print(Z)
    ```
    - 답 : 4
    ```
    [0 0 6 0 7 9 0 8 8 0]
    ```


17. 다음 코드를 실행할 경우 예상되는 결과값은 무엇인가?
    ```
    arr = np.array([[17, 27, 14, 11],
                    [8, 24, 25, 26],
                    [11, 26, 26, 23],
                    [22, 18, 24, 11]])
    print(arr[[0, 2, 1]])
    ```
    - 답 : 1
    ```
    [[17 27 14 11]
     [11 26 26 23]
     [ 8 24 25 26]]
    ```


---
### 공부
[데이터 과학을 위한 파이썬 머신러닝 : 3. 넘파이](https://blex.me/@Laeti-Park/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B3%BC%ED%95%99%EC%9D%84-%EC%9C%84%ED%95%9C-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-3-%EB%84%98%ED%8C%8C%EC%9D%B4)

### 출처
최성철, 『데이터 과학을 위한 파이썬 머신러닝』, 초판, 한빛아카데미, 2022
