Numpy 차원 이해하기일전에 Numpy 축에 관한 포스팅을 했었는데 그보다 더 개념적인 얘기를 할까 합니다.Numpy는 다차원 배열을 다루는만큼 수치계산을 한꺼번에 처리할 수 있도록 도와주는 효율적인 라이브러리입니다. Numpy는 다차원 배열을 차원으로 분류했는데 데이터 구조를 표현하는데 있어서 중요한 역할을 합니다.Numpy 차원 정의차원의 종류Numpy에서 차원은 축이라고도 불리기도 합니다. 우리는 보통 3차원을 쓰기 때문에 그렇기도 한데요. 엄밀히 따지면 차원과 축은 포커싱된 부분이 다릅니다. 차원은 깊이에 더 포커싱이 되어있습니다. 차원은 배열의 층이 얼마나 되는지를 정의합니다. 축은 데이터가 나아가는 방향에 초점이 맞춰져 있습니다. 차원내에서 데이터를 어떻게 다룰것인지를 정의합니다.다시말해, ..
파이썬 절대값 출력하기 파이썬에서 절대값을 만드는 방법은 정말 많은 방법이 있는데요. 그 중 가장 많이 쓸만한 것으로 5가지 추려봤습니다. 1. 내장함수 abs() 함수 사용 num = -5 absolute_value = abs(num) print(absolute_value) # 출력: 5 2. numpy 배열인 경우 numpy에서는 절대값 메쏘드는 fabs()입니다. np.fabs(숫자)로 씁니다. import numpy as np num = np.array([5,-1]) absolute_value = np.fabs(num) print(absolute_value) # 출력: [5. 1.] 3. math 모듈을 이용한 방법 math 모듈에서도 numpy와 마찬가지로 fabs()함수를 씁니다. import..
NumPy는 파이썬에서 과학적 계산을 위한 핵심 라이브러리로, 다차원 배열을 다루는데 매우 유용합니다. 이러한 다차원 배열은 종종 복잡한 계산을 수행하는 데 필요한 데이터 구조로 사용됩니다. 그러나 다차원 배열을 단일 차원으로 변환하여 데이터를 보다 효율적으로 처리하고자 할 때가 있습니다. 이를 평탄화(flattening)라고 합니다. 보통 머신러닝을 하게 되면 데이터를 분석하려는 머신이 단일 차원을 원하면 평탄화를 쓸 수밖에 없습니다. 평탄화를 꼭 Numpy로 해야하는 건 아니지만 데이터를 보통 numpyarray로 만들기도 하고 생각보다 아주 많이 간편합니다. 평탄화 작업 np.ravel() 함수를 활용한 평탄화 NumPy는 다차원 배열을 평탄화하기 위해 np.ravel() 함수를 제공합니다. 이 함..
넘파이로 만든 ndarray를 합치는 방법입니다. 이전 포스팅에서 설명했던 append와는 약간 다릅니다. append는 ndarray가 아닌 숫자나 리스트도 추가할 수 있었다면 np.concatente는 ndarray만을 합칩니다. 파라미터는 다음과 같습니다. np.concatenate(($a_1$,$a_2$,...), axis=0, out=None, dtype=None, casting = "same_kind") $a_1$,$a_2$,... : ndarray이며 반드시 같은 shape여야 합니다. axis : 축을 의미하고 0~2까지 가능하고 디폴트는 0입니다. out : ndarray이며 연결된 배열의 최종 모양을 보여줍니다. 반드시 합쳤을때의 모양과 일치해야합니다. dtype : 타입을 보여주는데 ..
numpy 에서 배열 분할하는 방법에 대해서 알아보겠습니다. 기본적으로 np.split(array, indices or section, axis=0) 으로 분할합니다. 행렬이 3차원이상이면 수직(vertical), 수평(horizontal), 깊이(depth)로 구성되어 있는데 np.split에서는 수직(행),수평(열)만 가능하기에 깊이로 분할이 불가능합니다. 그렇기 때문에 각각에 대해 다른 대체 메쏘드가 존재합니다. axis=0 일때는 np.vsplit() 으로 axis=1 일때는 np.hsplit()으로 axis=2 일때는 np.dsplit() 으로 가능합니다. 또한, np.split는 같은 크기로의 분할만 가능합니다. 예를 들어, (4,4) 행렬이라면 같은 크기로 나눌 수 있는 1,2,4에서만 가능..
Numpy로 랜덤한 값을 기반으로 분포함수를 구현하는 방법입니다. 파이썬으로 하기 정말 간단한데 분포가 워낙 많이 있다보니깐 쓰는 함수만 쓰게 되긴 합니다만 복잡한 모델을 하다보면 평가방식을 달리 하거나 새로운 접근을 위해서 포스팅에 정리합니다. 구현 맛보기로 정규분포와 푸아송 분포를 구현해보겠습니다. 나머지 분포는 밑에 표로 남겨 놓겠습니다. poisson 분포의 람다값은 1로 하겠습니다. import numpy.random as npr #샘플 사이즈 sample_size = 500 #분포 rd1 = npr.standard_normal(sample_size) rd2 = npr.poisson(lam=1.0, size = sample_size) # 그리기 from pylab import plt, mpl p..
np.linalg을 이용해 행렬 계산을 해보겠습니다. 1. 행렬식(np.linalg.det(x))행렬식을 구하는 방법입니다. 보통 행렬식이 0이 아니면 역행렬이 존재하므로 확인용으로 하거나 지금은 파이썬으로 할 것이라 역행렬을 구할 때 행렬식을 구하고 계산해서 쓰진 않을 거지만 실제 수학계산에서는 행렬식을 반드시 사용해주어야 합니다. 예로 2x2 행렬을 해보겠습니다. 2x2 행렬식이면 $ \begin{vmatrix} a & b \\ c & d \end{vmatrix} $ = ad-bc 로 계산이 됩니다. 만약 $ \begin{pmatrix} 1 & 2 \\ 3 & 2 \end{pmatrix} $ 라면 행렬식은 -4가 나옵니다. import numpy as nparray = np.array([[1,2..
수치계산을 하다보면 반올림을 하거나 소수점 제한을 줘서 출력해야 하는데 numpy에서 그런 역할을 하는 메쏘드가 있습니다. np.set_printoptions라는 것인데요. 정밀화 과정을 하거나 표현을 쉽게 하기 위해서 값의 설정을 변경할 수 있습니다. 쥬피터로 작업을 하면 한번만 설정해놓으면 밑의 작업들 전체가 설정에 따르게 됩니다. np.set_printoptions의 많은 파라미터가 있지만 주요로 쓰는 파라미터만 포스팅하고 나머지는 가이드 사이트에서 확인하시기 바랍니다. 제가 쓸 파마리터는 precision, threshold, formatter 입니다. 소수점 반올림하기(precision) 소수점 반올림합시다. 이게 한번 설정하면 처음처럼 자연스레 돌릴수가 없어서 먼저 처음으로 돌아갈 곳을 알고 ..
ndarray를 저장하고 불러오는 방법입니다. 파이썬에서 데이터를 파일로 저장하는 방법은 굉장히 많은데 ndarray로 저장을 하면 많은 양의 데이터를 굉장히 빠르게 저장할 수 있습니다. 불러오는 것도 마찬가지로 굉장히 빠릅니다. 그래서 많은 양의 ndarray를 저장할때 SQL이나 pickle 보다 효율적일 수 있습니다. ndarray는 보통 숫자로 이루어져있기 때문에 본인이 어떤 형식으로 데이터를 저장할지는 생각하기는 해야합니다. 이게 만능키가 아니라서 PyTables 라는 패키지로 어느정도 SQL 같이 data 다루는것도 할 수 있습니다. 완벽하게 모든 것을 커버하고 편리하고 빠르게 저장,로드하는 것을 굳이 놔두고 SQL을 쓰지 않았을거라 뭔가 한계점이 있을거라 봅니다. 이런 얘기를 다 할 수는 없..
넘파이의 meshgrid() 함수를 이용해 직사각형의 그리드를 만들어보겠습니다. 먼저 직사각형 그리드는 말 그대로 격자를 의미합니다. $ P_{ij}= (x_{i},y_{j}) $ 라고 하면 그림과 같이 하나의 좌표로써 표현 할 수 있는데 그림과 같이 직사각형 그리드 안에서 될 수 있도록 배치를 하는게 meshgrid의 역할입니다. meshgrid()를 이용해서 교정(?)을 해놓으면 3차원 그림을 그릴 때 유용합니다. 매개변수(Parameter) meshgrid()의 파라미터를 살펴보면 다음과 같습니다. np.meshgrid(xi, copy=True, sparse=False, indexing='xy') xi : 그리드에 나타낼 1차원 배열 벡터 copy : 디폴트는 True, False가 되면 메모리 절..
numpy를 이용해 SQL 배열같이 column이 있는 배열로 만들 수 있습니다. tructured array라고 하는데요. 같이 묶음으로 모아서 끌고 가야할때 간단히 모아서 가져가면 좋은 방식입니다. ndarray의 특성을 가지고 SQL처럼 쓸수 있는 장점이 있습니다. 그리고 각 column마다 다른 타입을 배정해줄 수 있습니다. 각 column은 (name,type)으로 이루어져 있고 배정후 사용하게 됩니다. dt = np.dtype([('Name', 'S10'), ('Age', 'i4'), ('Height', 'f'), ('Children/Pets', 'i4', 2)]) s = np.array([('Sims', 45, 1.83, (0, 1)), ('Jane', 55, 1.72, (2, 2))], d..
numpy에 있는 where() 함수에 대해 알아보겠습니다. 결론적으로 말하면 엑셀의 if 함수와 같은 역할을 합니다.쓰는 법도 비슷합니다.파라미터는 다음과 같습니다. np.where(condition,x,y) 엑셀의 if와 같이 condition은 말 그대로 조건이고x는 True일때의 값, y는 False일때의 값을 의미합니다. 예를 들어보겠습니다.a = np.array(range(15))a= a.reshape(3,5)여기서 7보다 큰 수는 1, 아니면 0으로 바꾸겠습니다.np.where(a>7,1,0) 이번에는 짝수,홀수로 나눠보겠습니다.np.where(a%2==0,'even','odd') 이렇듯 자신이 원하는 값으로 바꿀 수 있습니다.이렇게 만들고서 엑셀에 저장하면 엑셀에서 일일히 드래그 작업을 하..
numpy array의 곱연산에 대해서 알아보도록 하겠습니다. 곱연산에는 총 세가지 연산이 있는데요. 선형대수에서 배우는 행렬의 곱을 하는 행렬곱(@)과 내적, 스칼라 곱을 하는 별연산(*) 이 있습니다. 세개 모두 다른 부분이 있습니다. 그 부분을 잘 알고 있어야 내가 무슨 계산을 한건지 알고 혹시 나올 오류에 대처할 수 있습니다. 출력되는 모양과 가능한 연산모양을 표로 나타냈습니다. Operator Shape 별연산(*) (n,m)*(n,m) = (n,m) 브로드캐스팅시 (1,m)*(n,m) = (n,m) or (m,1)*(m,n) = (m,n) or (m,n)*(m,1) = (m,n) or (n,m)*(1,m) = (n,m) 내적(dot) (n,m).dot((m,k)) = (n,k) 행렬곱(@) (..
ndarray 에 값을 추가해보겠습니다. 리스트와 비슷한 듯 다릅니다. ndarray append ndarray에서 append를 써봅시다. >>> import numpy as np >>> array = np.array([]) >>> array = np.append(array,[1,2,3]) array([1., 2., 3.]) 리스트와 다르게 추가할 ndarray를 지정을 해주고 리스트 형태로 넣습니다. 값 하나만 넣으면 굳이 리스트로 안 해도 됩니다. >>> array = np.array([]) >>> array = np.append(array,1) array([1.]) 차원을 늘리며 append numpy를 쓰는 가장 큰 이유는 벡터화를 시켜 계산을 하는 목적이기 때문에 차원을 생각하면서 코딩작업을 ..
matplotlib로 ndarray의 그래프를 그려보겠습니다. 참고로 Jupyter notebook에서 코드작성합니다. import numpy as np import matplotlib.pyplot as plt %matplotlib inline matplotlib 모듈을 이용해서 그래프를 그릴수 있는데 jupyter는 브라우저상의 개발도구라서 바로 그래프를 나타내야 한다고 명령을 따로 해줘야 합니다. '현 웹창에 당장 그래프를 그려줘'라는 명령을 내려줘야 하는데 그 명령이 %matplotlib inline입니다. 데이터 이렇게 import를 하면 이제 그래프를 생성할 수 있는 도구는 다 모은 셈입니다. 그래프를 그릴려면 먼저 데이터가 있어야겠지요. x,y로 ndarray를 만들겠습니다. x = np.li..