import numpy
보다는 import numpy as np
로 불러옵니다.import numpy as np
numpy.ndarray
타입을 가진 배열의 모양을 얻어오는 방법을 배워보겠습니다.A = np.array([[1, 1, 1], [2, 3 ,4]])
print(A.shape)
(2, 3)
- 위 코드에서 배열 A을 표로 나타내면 다음과 같습니다.
- 배열 A는 2 × 3 모양을 가진 2차원 배열이며,
A.shape
을 통해tuple
타입으로 얻어 낼 수 있습니다.
ones()
은 1로 채워진 배열을 반환하며 shape
인자를 통해 모양을 지정할 수 있습니다.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))
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.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
타입의 배열에 존재하는 요소들을 변경해보도록 합시다.바꾸고자 하는 요소의 위치(인덱스)를 안다면 직접 접근하여 값을 변경할 수 있습니다.
>>> 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]
>>> 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]]
List
방식li_A
와 li_B
를 생성한다.for
문을 사용하여 li_A
와 li_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
방식numpy.ndarray
변수를 생성한다.for
문이 아닌 + 연산자만 사용하여 arr_A
와 arr_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]
곱셈 연산
>>> 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
문 없이 간단한 코드로 배열 간의 요소별 연산을 할 수 있습니다.