언어/파이썬 & 장고
-
[Python] 행렬의 곱셈언어/파이썬 & 장고 2019. 9. 12. 21:55
먼저 행렬을 곱하기 위해서는 앞 행렬의 열의 수와 뒤 행렬의 행의 수가 같아야 됩니다. 이러한 조건이 맞다면 행렬의 곱셈의 결과 크기는 (앞 행렬의 행의 수)×(뒤 행렬의 열의 수)가 됩니다. 즉, 앞 행렬이 m X n 이고 뒤 행렬이 n X r 인 경우 곱은 m X r 크기의 행렬이 됩니다.예를 들어, 2x2 행렬의 곱은 아래와 같습니다.이를 식으로 표현하면 아래와 같습니다.따라서 행렬의 곱셈의 복잡도는 O(n^3)입니다.아래는 복잡도 O(n^3)의 행렬의 곱셈을 구하는 파이썬 코드입니다.def solution(arr1, arr2): answer = [] for i in range(0, len(arr1)): temp_row = [] for j in range(0, len(arr2[0])): value ..
-
[Django] Custom order by 정의하기언어/파이썬 & 장고 2019. 9. 12. 19:42
이전에 PostgreSQL에서 사용자가 원하는 정렬을 하는 로직을 정리했습니다. (https://brownbears.tistory.com/384) 여기서는 Djago ORM을 이용하여 사용자가 원하는 order by를 하는 방법을 설명합니다. PostgreSQL 9.5 이상의 버전이라면 array_position 을 사용해 손쉽게 사용자가 원하는 정렬을 할 수 있지만 Django ORM은 해당 기능을 지원하지 않기 때문에 Case문을 사용해 정의합니다.from django.db.models import Case, Q # 아래의 pk 순서대로 정렬하고자 함 pk_list = [2, 10, 1] preserved = Case(*[When(pk=pk, then=pos) for pos, pk in enumera..
-
[Python] 소수 구하기 (에라토스테네스의 체)언어/파이썬 & 장고 2019. 9. 1. 20:32
소수란 1과 자기 자신만을 가지는 정수입니다. 소수를 구하는 알고리즘은 많지만 여기서 설명하는 알고리즘은 에라토스테네스의 체라고 불리는 알고리즘입니다. 에라토스테네스는 고대 그리스의 수학자로서 마치 체로 걸러 내는 것처럼 수를 걸러 낸다고 하여 에라토스테네스의 체라고 부릅니다.이 방법은 아주 단순하지만 소수를 구하는데 효과적인 방법입니다.원리숫자 1 ~ 120 범위 안에 있는 소수를 모두 계산한다고 가정합니다.1은 소수도, 합성수도 아닌 기초수이기 때문에 1을 제거합니다. 2는 소수이므로 2를 다른 곳에 기록합니다.자기 자신(2)를 제외한 2의 배수를 모두 지웁니다.남아있는 수에서 2 다음인 수인 3부터 진행을 시작합니다.3은 소수이므로 2를 기록한 곳에 기록합니다.자기 자신(3)을 제외한 3의 배수를 ..
-
[Python] 반올림 만들기 (오사오입, 반올림 오류 해결하기)언어/파이썬 & 장고 2019. 8. 31. 22:09
파이썬에서 반올림은 보통 아래와 같이 구현합니다. round(0.6) # 1 round(2.4) # 2 round()에 대해 찾아보면 자세한 내용이 있지만 간단하게 우리가 아는 반올림은 사사오입이라고도 불리며 파이썬의 round()는 통계적인 반올림의 결과를 반환합니다. 이 때문에 나오는 결과에 대해서 오사오입 원칙이라고도 하는데 이를 설명하면 반올림 대상의 값이 5이고, 반올림 대상의 앞자리의 숫자가 짝수면 내림, 홀수면 올림을 진행합니다. round(4.5) # 4 round(0.5) # 0 round(5.5) # 6 round(1.5) # 2 위 예시처럼 4.5는 반올림 대상의 앞자리가 짝수이므로 내림이 되었고 5.5에서는 5가 홀수이므로 올림이 되었습니다. 이러한 규칙을 모르고 반올림을 구한다면 ..
-
[Django] Migration 기능언어/파이썬 & 장고 2019. 8. 31. 21:27
장고의 명령어 중, migrate, makemigrations 와 같은 명령어가 있습니다. 이러한 명령어는 models.py에 정의된 모델의 생성/변경 내역을 히스토리 관리, 데이터베이스에 적용 등과 같은 기능을 제공하여 손쉽게 데이터베이스의 구조를 바꿀 수 있습니다.Migration 관련 명령어# 마이그레이션 파일 생성 $ python manage.py makemigrations # 마이그레이션 적용 $ python manage.py migrate # 마이그레이션 적용 현황 $ python manage.py showmigrations # 지정 마이그레이션의 SQL 내역 python manage.py sqlmigrate makemigrations$ python manage.py makemigrations..
-
[Django] Custom FilterSet (FilterSet으로 복잡한 쿼리 실행하기)언어/파이썬 & 장고 2019. 8. 31. 20:34
Django FilterSet 라이브러리는 GET 요청을 받고 쿼리 파라미터를 제어하는 기능을 제공합니다.아래는 기본적으로 filterset을 사용한 예제입니다.http://127.0.0.1:8000/test?name=kim class NameFilter(filters.FilterSet): name = django_filters.CharFilter( name='name', lookup_expr='icontains' ) 만약 위와 같은 구조가 아닌 여러 컬럼에 접근해야 한다면 아래와 같이 method를 지정하여 처리를 하도록 합니다.http://127.0.0.1:8000/test?name=kim class NameFilter(filters.FilterSet): name = django_filters.Cha..
-
[Python3] ElasticSearch 사용하기언어/파이썬 & 장고 2019. 2. 17. 20:16
1. 기본 세팅엘라스틱 서치 설치 : https://www.elastic.co/kr/downloads/elasticsearch한글 형태소 분석기 노리 설치: https://www.elastic.co/kr/blog/nori-the-official-elasticsearch-plugin-for-korean-language-analysis파이썬3 엘라스틱서치 패키지 설치: https://elasticsearch-py.readthedocs.io/en/master/2. 파이썬 Elastic Search 세팅아래는 위에서 설치 받은 한글 형태소 분석기인 nori를 특정 필드에 적용도록 하는 세팅 방법 입니다.from elasticsearch import Elasticsearch # es 실행 기본포트: 9200, 기..
-
[Django] Custom Manager, Custom QuerySet언어/파이썬 & 장고 2019. 2. 2. 18:12
Django 모델에서 Manager는 데이터베이스와 상호 작용하는 인터페이스입니다. 기본적으로 Manager는 Model.objects 속성을 통해 사용할 수 있습니다. Django 모델마다 기본적으로 사용되는 기본 관리자는 django.db.models.Manager입니다.from django.db import models class DocumentManager(models.Manager): def pdfs(self): return self.filter(file_type='pdf') def smaller_than(self, size): return self.filter(size__lt=size) class Document(models.Model): name = models.CharField(max_le..
-
[Django] Prefetch()를 사용한다면 to_attr 속성을 같이 사용하자언어/파이썬 & 장고 2019. 2. 2. 17:35
ORM을 조인하고 싶을 때 N:1의 관계나 N:N의 관계일 경우, prefetch_related()를 사용하게 됩니다. 모델 정의예시를 들기 위해 아래와 같이 모델과 모델간 관계를 정의합니다.from django.db import models class Topping(models.Model): name = models.CharField(max_length=30) class Pizza(models.Model): name = models.CharField(max_length=50) toppings = models.ManyToManyField(Topping) vegetarian = models.BooleanField() def __str__(self): return "%s (%s)" % ( self.name,..
-
[Python] 문자열을 Datetime으로 변경하는 방법언어/파이썬 & 장고 2019. 2. 2. 16:50
문자열로 되어 있는 시간을 Datetime 객체로 변경하는 방법은 많이 찾아 볼 수 있습니다. 여기서는 기존에 존재하는 방법과 추가 설치 모듈로 좀 더 간편하게 사용하는 방법을 설명하겠습니다.1. Datetime파이썬에 내장되어 있는 Datetime 패키지를 사용하여 아래와 같이 변환을 할 수 있습니다.import datetime date_time_str = '2018-06-29 08:15:27.243860' date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f') print('Date-time:', date_time_obj) # Date-time: 2018-06-29 08:15:27.243860 흔히 사용하는 포맷..