[Numpy 배열 연산] -1

임동윤·2022년 10월 3일
0
post-thumbnail

Numpy 패키기 불러오기

  • Numpy를 사용하기 위해서는 우선 Numpy패키지를 불러와야 합니다.
    • 많은 개발자들이 Numpy를 불러올 때 일반적으로 import numpy 보다는 import numpy as np로 불러옵니다.
import numpy as np

Numpy 배열의 모양

  • 이번에는 numpy.ndarray 타입을 가진 배열의 모양을 얻어오는 방법을 배워보겠습니다.
A = np.array([[1, 1, 1], [2, 3 ,4]])
print(A.shape)
(2, 3)
  • 위 코드에서 배열 A을 표로 나타내면 다음과 같습니다.
  • 배열 A는 2 × 3 모양을 가진 2차원 배열이며, A.shape을 통해 tuple 타입으로 얻어 낼 수 있습니다.

Numpy one, zero 배열 생성

  • Numpy의 함수를 사용하여 1로만 이루어진 배열 및 0으로만 이루어진 배열을 만들어보도록 하겠습니다
    1. ones()은 1로 채워진 배열을 반환하며 shape 인자를 통해 모양을 지정할 수 있습니다.
    2. zeros()은 0으로 채워진 배열을 반환하며 shape인자를 통해 모양을 지정할 수 있습니다.
import numpy as np
np.random.seed(42)

# np.ones()을 사용하여 2 x 1 x 3 모양을 가진 배열을 만들어줍니다.
A = 
np.ones(shape = (2,1,3))

# np.zeros()을 사용하여 3 x 4 x 2 모양을 가진 배열을 만들어줍니다.
B = 
np.zeros(shape = (3,4,2))

Numpy 랜덤 배열 생성

Numpy의 random을 사용하여 배열을 만들어봅시다.

  • random의 함수를 사용하여 지정한 사이즈에 맞게 무작위 값으로 요소들을 채워 배열을 만들 수 있습니다.

    • randn()에 모양을 인자로 주어 배열을 생성합니다. 이때, randn()에 들어간 인자의 순서대로 차원의 크기가 정해집니다.

    • normal()은 정규 분포에 맞게 생성하는 함수로서 모양을 size 인자를 통해 전달하여 배열을 생성합니다. 이때 평균(mean)과 표준편차(std)값을 각각 loc, scale 인자를 통해 지정할 수 있습니다.

    • randint(start, end, size)는 임의의 정수들로 채워진 배열을 만들어줍니다. 이때 정수 범위는 start 이상 end 미만으로, size에 모양을 인자로 전달합니다.

>>> import numpy as np

# 3 x 2의 모양을 가진 배열을 가우시안 분포에 따라 랜덤하게 만들어줍니다.
>>> randn_arr = np.random.randn(3,2)
>>>print(randn_arr)
[[0.13877501 -1.02584702]
 [0.88228595 -0.08836542]
 [-1.21212413 0.54791626]]

# 3 x 2의 모양을 가진 배열을 랜덤하게 만들어줍니다.
>>> rand_arr = np.random.normal(size=(3, 2))
>>> print(rand_arr) 
[[-1.25582381 -0.03418971]
 [-0.6234516   0.34737055]
 [ 0.79151938  1.63548097]]

# 3 x 2의 모양을 가진 배열을 정규 분포에 따라 랜덤하게 만들어줍니다.
>>> rand_normal_arr = np.random.normal(loc = 3, scale = 0.25, size=(3, 2))
>>> print(rand_normal_arr) 
[[2.87919609 2.95184   ]
 [2.97402801 3.44054116]
 [2.77450037 3.24502051]]

# 3 x 2의 모양을 가지고, 1부터 9까지 임의의 정수로만 이루어진 배열을 만들어줍니다.
>>> rand_int_arr = np.random.randint(1, 10, size=(3, 2))
>>> print(rand_normal_arr) 
[2 6]
 [3 3]
 [9 2]]

Numpy 특정 요소 읽어오기

  • numpy.ndarray 타입의 배열에 존재하는 요소들에 대해서 접근해봅시다.
    • Python의 list와 동일하게 1차원 배열에 대해서 인덱스를 가지고 요소에 접근할 수 있습니다.

      >>> import numpy as np
      >>> arr = [1, 3, 10, 55, 31, 12, 15]
      >>> A = np.array(arr)
      >>> print(A[3])
      55
    • 2차원 배열의 경우 Python의 list와 동일하게 인덱싱이 가능하지만 보편적으로 []안에 쉼표를 기준으로 구분하여 인덱싱하는 것을 권장합니다.

      >>> import numpy as np
      
      >>> arr = [[1, 2, 4], [12, 15, 17]]
      >>> print(arr[1][2])
      17
      
      >>> np_arr = np.array(arr)
      >>> print(np_arr[1][2])
      17
      >>> print(np_arr[1, 2])
      17

특정 요소 변경하기

  • numpy.ndarray 타입의 배열에 존재하는 요소들을 변경해보도록 합시다.
    • 바꾸고자 하는 요소의 위치(인덱스)를 안다면 직접 접근하여 값을 변경할 수 있습니다.

      • 1차원 배열
      >>> import numpy as np
      
      >>> arr = [1, 3, 10, 55, 31, 12, 15]
      >>> A = np.array(arr)
      >>> A[3] = 22
      >>> print(A)
      [ 1  3 10 22 31 12 15]
      • 2차원 배열
      >>> import numpy as np
      
      >>> arr = [[1, 2, 4], [12, 15, 17]]
      >>> np_arr = np.array(arr)
      >>> np_arr[1, 2] = 100
      >>> print(np_arr)
      [[  1   2   4]
       [ 12  15 100]]

Numpy 덧셈

  • Numpy를 사용해 배열의 요소별 덧셈 연산을 해봅시다.
    • List 방식
      1. 1차원 리스트 li_Ali_B를 생성한다.
      2. 1개의 for문을 사용하여 li_Ali_B 사이의 요소별 덧셈 연산을 한다.
        >>> li_A = [1, 2, 3, 4, 5]
        >>> li_B = [6, 7, 8, 9, 10]
        >>> result = [a + b for a, b in zip(li_A, li_B)]
        >>> print(result)
        [7, 9, 11, 13, 15]
    • Numpy 방식
      1. 두 개의 numpy.ndarray 변수를 생성한다.
      2. for문이 아닌 + 연산자만 사용하여 arr_Aarr_B 사이의 요소별 덧셈 연산을 한다.
      • Numpy를 이용하면 높은 차원의 배열일지라도 같은 모양을 가졌다면, 여러 개의 for문이 아닌 단 한 줄의 코드만으로 연산 코드를 작성할 수 있습니다.

        >>> import numpy as np
        
        >>> arr_A = np.array([1, 2, 3, 4, 5])
        >>> arr_B = np.array([6, 7, 8, 9, 10])
        >>> result = arr_A + arr_B 
        >>> print(result)
        [ 7  9 11 13 15]

Numpy 곱셈, 뺄셈, 나눗셈, 나머지 연산

  • Numpy를 사용해 할 수 있는 다양한 배열 연산에 대해 알아봅시다.
    • 곱셈 연산

      >>> import numpy as np
      
      >>> arr_A = np.array([1, 2, 3, 4, 5])
      >>> arr_B = np.array([6, 7, 8, 9, 10])
      >>> result = arr_A * arr_B 
      >>> print(result)
      [ 6 14 24 36 50]   
    • 뺄셈 연산

      >>> import numpy as np
      
      >>> arr_A = np.array([6, 4, 2, 5, 9])
      >>> arr_B = np.array([3, 1, 3, 4, 10])
      >>> result = arr_A - arr_B 
      >>> print(result)
      [ 3  3 -1  1 -1]
    • 나눗셈 연산

      >>> import numpy as np
      
      >>> arr_A = np.array([2, 6, 6])
      >>> arr_B = np.array([4, 3, 8])
      >>> result = arr_A / arr_B 
      >>> print(result)
      [0.5  2.   0.75]   
    • 나머지 연산

      >>> import numpy as np
      
      >>> arr_A = np.array([5, 3, 6])
      >>> arr_B = np.array([2, 2, 4])
      >>> result = arr_A % arr_B 
      >>> print(result)
      [1 1 2]
    • Numpy에서는 +, *, -, /, % 연산자를 사용하여 for문 없이 간단한 코드로 배열 간의 요소별 연산을 할 수 있습니다.


profile
AI Tensorflow Python

0개의 댓글