Numpy
1. 특징
- 다차원 행렬 및 배열 처리 및 연산
2. NumPy 설치
Python이 있는 경우 다음을 사용하여 NumPy를 설치할 수 있습니다.
conda install numpy
또는
pip install numpy
3. NumPy를 가져오는 방법
NumPy 및 해당 기능에 액세스하려면 다음과 같이 Python 코드에서 가져옵니다.import numpy as np
np를 사용하여 코드의 더 나은 가독성을 위해 가져온 이름을 줄여서 사용합니다.
4. 완전 기본
NumPy의 다차원 배열을 표현하고 사용하기 위해서 사용합니다. 이것은 양수의 튜플에 의해 인덱싱된 같은 유형의 요소(보통 숫자)의 테이블입니다.
(튜플이란 python에서 () 로 이루어진 데이터의 연속이나 수정이 안되는 배열로 생각 하면 됩니다. list의 수정 안되는 형태라고 이해하시면 됩니다. )
아래와 같이 표현된다면 2차원 배열이라고 생각 하면 됩니다.
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]]
위 리스트를 numpy로 생성시키면 아래와 같은 2차원으로 배열로 표현이 됩니다.
import numpy as np a = np.array([[ 0, 1, 2, 3, 4],[ 5, 6, 7, 8, 9],[10, 11, 12, 13, 14]]) print(f"array {a}")
array [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]]
여기에서 np.array() 함수는 list나 tuple 형태를 np 로 변환하게 됩니다.
- ndarray.ndim
배열의 축(차원) 수입니다.
- ndarray.shape
배열의 차원. 이것은 각 차원에서 배열의 크기를 나타내는 정수의 튜플입니다. n개의 행과 m 개의 열
shape
이 있는 행렬의 경우(n,m)
입니다.shape
따라서 튜플의 길이는 축의 수입니다. 많이 사용하게 되므로 꼭 기억해 둘 필요가 있습니다.- ndarray.size
배열의 총 요소 수입니다.
- ndarray.dtype
배열의 요소 유형을 설명하는 개체입니다. 표준 Python 유형을 사용하여 dtype을 만들거나 지정할 수 있습니다. 또한 NumPy는 자체 유형을 제공합니다. numpy.int32, numpy.int16 및 numpy.float64가 몇 가지 예입니다.
- ndarray.itemsize
배열의 각 요소의 크기(바이트)입니다.
- ndarray.data
배열의 실제 요소를 포함하는 버퍼. 일반적으로 인덱싱 기능을 사용하여 배열의 요소에 액세스하기 때문에 이 속성을 사용할 필요가 없습니다.
import numpy as np a = np.array([[ 0, 1, 2, 3, 4],[ 5, 6, 7, 8, 9],[10, 11, 12, 13, 14]]) print(f"array {a}") print(f"np.ndim {a.ndim}") print(f"np.shape {a.shape}") print(f"np.size {a.size}") print(f"np.dtype {a.dtype}") print(f"np.itemsize {a.itemsize}") print(f"np.data {a.data}")
array [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] np.ndim 2 np.shape (3, 5) np.size 15 np.dtype int32 np.itemsize 4 np.data <memory at 0x000001F07A34AEE0>
5. 생성
5.1 array 이용
import numpy as np >>> a = np.array([2, 3, 4]) >>> a array([2, 3, 4]) >>> a.dtype dtype('int64') >>> b = np.array([1.2, 3.5, 5.1]) >>> b.dtype dtype('float64')
c = np.array([[1, 2], [3, 4]], dtype=complex) >>> c array([[1.+0.j, 2.+0.j], [3.+0.j, 4.+0.j]])
5.2 zeros, ones, empty 함수 사용
zeros
는 0으로 가득 찬 배열을 만들고,empty는
초기 내용이 무작위이고 메모리 상태에 따라 달라지는 배열을 만듭니다. float64
이지만 키워드 인수를 통해 지정할 수 있습니다.np.zeros((3, 4)) array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) >>> np.ones((2, 3, 4), dtype=np.int16) array([[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]], [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]], dtype=int16) >>> np.empty((2, 3)) array([[3.73603959e-262, 6.02658058e-154, 6.55490914e-260], # may vary [5.30498948e-313, 3.14673309e-307, 1.00000000e+000]])
5.3 arange 함수 사용
arange 를 이용(
Python 내장과 유사한 함수를 range 제공 ) 배열을 반환합니다.np.arange(10, 30, 5) array([10, 15, 20, 25]) >>> np.arange(0, 2, 0.3) # it accepts float arguments array([0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])
6. 차원의 변환
c = np.arange(24)
print(f"array {c}")
print(f"array {c.reshape(2,3,4)}")
print(f"array {c.reshape(-1,3,4)}")
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]]]
Traceback (most recent call last): File "np.py", line 14, in <module> print(f"array {c.reshape(2,3,4)}") ValueError: cannot reshape array of size 23 into shape (2,3,4)
7. 기본 연산
a = np.array([20, 30, 40, 50]) >>> b = np.arange(4) >>> b array([0, 1, 2, 3]) >>> c = a - b >>> c array([20, 29, 38, 47]) >>> b**2 array([0, 1, 4, 9]) >>> 10 * np.sin(a) array([ 9.12945251, -9.88031624, 7.4511316 , -2.62374854]) >>> a < 35 array([ True, True, False, False])
A = np.array([[1, 1], ... [0, 1]]) >>> B = np.array([[2, 0], ... [3, 4]]) >>> A * B # elementwise product array([[2, 0], [0, 4]]) >>> A @ B # matrix product array([[5, 4], [3, 4]]) >>> A.dot(B) # another matrix product array([[5, 4], [3, 4]])
8. 합, 최대 최소 값 그리고 축이야기
a = rg.random((2, 3)) >>> a array([[0.82770259, 0.40919914, 0.54959369], [0.02755911, 0.75351311, 0.53814331]]) >>> a.sum() 3.1057109529998157 >>> a.min() 0.027559113243068367 >>> a.max() 0.8277025938204418
b = np.arange(12).reshape(3, 4) >>> b array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> >>> b.sum(axis=0) # sum of each column array([12, 15, 18, 21]) >>> >>> b.min(axis=1) # min of each row array([0, 4, 8]) >>> >>> b.cumsum(axis=1) # cumulative sum along each row array([[ 0, 1, 3, 6], [ 4, 9, 15, 22], [ 8, 17, 27, 38]])
9. sin, cos, exp 함수 범용 기능
B = np.arange(3) >>> B array([0, 1, 2]) >>> np.exp(B) array([1. , 2.71828183, 7.3890561 ]) >>> np.sqrt(B) array([0. , 1. , 1.41421356]) >>> C = np.array([2., -1., 4.]) >>> np.add(B, C) array([2., 0., 6.])
10. 인덱싱, 슬라이싱
def f(x, y): ... return 10 * x + y ... >>> b = np.fromfunction(f, (5, 4), dtype=int) >>> b array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]]) >>> b[2, 3] 23 >>> b[0:5, 1] # each row in the second column of b array([ 1, 11, 21, 31, 41]) >>> b[:, 1] # equivalent to the previous example array([ 1, 11, 21, 31, 41]) >>> b[1:3, :] # each column in the second and third row of b array([[10, 11, 12, 13], [20, 21, 22, 23]])
:
b[-1] # the last row. Equivalent to b[-1, :] array([40, 41, 42, 43])
댓글 없음:
댓글 쓰기