본문 바로가기

전체 글

(27)
CPLEX - Python API CPLEX는 상용 최적화 프로그램으로 학생 또는 연구자들에게는 무료로 제공되는 프로그램이다. CPLEX를 활용하면 복잡하고 어려운 최적화 문제를 풀 수 있다. 물론 경우에 따라 NP-hard에 속하는 문제라면 시간이 오래 걸리지만, CPLEX를 통해서 언젠가는 최적해를 구할 수 있다. CPLEX를 이용해서 최적화 문제를 풀기 위해서는 최적화 문제의 수리모델을 CPLEX의 OPL을 이용해서 코딩하거나 아니면 JAVA, Python API를 이용해서 코딩을 할 수도 있다. 본 포스팅에서는 Python API를 이용해서 최적화 문제를 코딩하는 방법을 작성해보려고 한다. 먼저 CPLEX를 통해서 풀려고 하는 최적화 문제를 아래와 같이 정의 하겠다. (본 포스팅에서는 MILP문제를 다루려고 한다.) $$ Min ..
Numpy 사용법 (6) - np.argmax(), np.argsort() 이번 포스팅에서는 np.argmax(), np.argsort()에 대해서 작성할 것이다. numpy를 활용하면 배열에서 가장 큰(작은) 원소, 오름(내림)차순 정렬이 가능하다. 한편, np.argmax()를 이용하면 배열에서 가장 큰 원소의 index를 반환할 수 있다. 아래 예제 코드를 통해서 알아보자. ☞ np.argmax() 예제 코드 import numpy as np tmp = np.array([1,3,2,5,9,8,7]) tmp1 = np.array([[10,11,12],[102,100,101]]) print(tmp) tmp_max = np.argmax(tmp) # 배열 tmp에서 가장 큰 원소의 index를 반환, '9'의 index를 반환 print(tmp_max) print() print(..
Numpy 사용법 (5) - np.where() 이번 포스팅에서는 np.where()에 대해서 알아보겠다.  np.where()로 가장 먼저 할 수 있는 것은 배열내에 특정 조건을 만족하는 원소의 index를 찾아내는 것이다.  ☞ np.where()를 이용한 배열내 원소의 index 찾기 예재 코드import numpy as np tmp = np.array([2,3,6,7,10,13,14])       # 배열 tmp를 생성print(tmp) test1 = np.where(tmp# 배열 tmp에서 10보다 작은 원소의 index를 반환하는 배열을 생성 print(test1[0]) test2 = np.where(tmp%2==0) # 배열 tmp에서 2의 배수인 원소의 index를 반환하는 배열을 생셩 print(test2[0]) ☞ np.where()..
Numpy 사용법 정리(4) 1. 배열을 거꾸로 만드는 방법 Numpy에서 제공하는 함수인 np.flip()을 사용하면 배열을 역순으로 정리할 수 있다. 아래 예제 코드를 통해 알아보자. ☞ np.flip() 예제 코드 import numpy as np test = np.array( [1, 2, 3, 4, 5] ) # 'test' 라는 배열을 정의 r_test = np.flip(test) # 'r_test' 라는 배열을 정의, 'test'라는 배열이 역순으로 된 배열 ☞ np.flip() 예제 코드 출력 결과 [1 2 3 4 5] [5 4 3 2 1] np.flip()은 2차원 배열에서도 적용 가능하다. 아래 예제 코드를 통해서 알아보자. ☞ np.flip() 2차원 배열 예제 코드 (행, 열 역순) import numpy as n..
Numpy 사용법 정리(3) 1. Unique한 원소 찾기 np.unique()를 사용하면 array에서 unique한 원소만을 추출할 수 있다. 위의 예제에서는 1차원 array에 대해 np.unique()를 적용했다. 아래 예제에서는 2차원 array에서 적용 예제를 살펴보겠다. 2차원 array에 대해서 np.unique('array이름', axis=0 또는 1)을 사용하면 2차원 array에서 unique한 행이나 열을 반환하는 것을 알 수 있다. 위의 예제를 보면 쉽게 이해할 수 있을 것이다. 아래 예제에서는 np.unique()를 종합적으로 사용한 예제이다. 위의 예제는 np.unique('array', return_index=True, return_counts=True, axis=0)을 종합적으로 사용한 것이다. 're..
Numpy 사용법 정리(2) 이번 포스팅은 지난번 포스팅에 이어 numpy 사용법에 대해 추가로 작성해보려 한다. 1. Array끼리 합치기(수직, 수평 결합) numpy는 두개의 array에 대해서 수직 또는 수평으로 결합하는 코드를 제공한다. 각각 np.vstack(), np.hstack()이라는 코드를 사용하며 예제를 보면 쉽게 이해할 수 있을 것이다. 2. array별 연산 numpy는 array에 있는 데이터에 대해서 최대, 최소, 합계, 등을 연산을 해주는 함수를 제공한다. 각각 np.max(), np.min(), np.sum(), np.mean(), np.std(), np.prod()이며, 마찬가지로 예제를 통해서 쉽게 이해할 수 있을 것이다.
파이썬 - Numpy 사용법 정리 이번 포스팅에서는 Numpy의 사용방법에 대해서 작성해보려고 한다. 이 포스팅에서는 Numpy를 np로 import한것을 가정하고 코드를 작성하였다. 1. 리스트(list)를 배열(array)로 바꾸기 리스트를 array로 바꾸기 위해서는 np.array('변경을 희망하는 리스트')로 코드를 작성하면 된다. 2. numpy를 활용한 간단한 배열 만들기 여기서 핵심은 np.zeros, np.ones, np.eye를 사용해서 배열을 만들 수 있다는 것이며 사용방법은 위의 코드를 참고하면 쉽게 이해할 수 있을 것이다. 추가로 np.eye(N, M=None, k=0, dtype=np.float) 함수로 작성할 수 있으며, 함수의 내부를 설명하면 N*M 행렬을 정의하며, k번째 주대각 원소를 1로 만들고 data..
우선순위 큐와 다익스트라 알고리즘(Dijkstra algorithm) 이번 포스팅에서는 우선순위 큐와 다익스트라 알고리즘에 대해서 작성하려 한다. 사실 다익스트라 알고리즘을 파이썬으로 구현하는 것이 이번 포스팅의 주요 목적이나, 우선순위 큐에 대한 개념을 알고 있어야 다익스트라 알고리즘을 쉽게 이해할 것 같아서, 먼저 우선순위 큐를 간략하게 소개하겠다. 1. 우선순위 큐 (Priority Queue) 우선순위 큐는 자료구조의 일종으로, 들어간 순서에 상관없이 우선순위가 높은것을 먼저 반환하는 자료구조이다. 참고로 큐(Queue)는 First-In, First-Out(FIFO), 먼저 들어온것을 먼저 반환하는 자료 구조이며, 스택(Stack)은 Last-In, First-Out(LIFO), 가장 늦게 들어온것을 먼저 반환하는 자료구조이다. 자세한 내용은 위키피디아를 참고하길..