목록2021/03 (22)
우노
예제 코드 import matplotlib.pyplot as plt plt.rc('font', size=20) # 기본 폰트 크기 plt.rc('axes', labelsize=20) # x,y축 label 폰트 크기 plt.rc('xtick', labelsize=50) # x축 눈금 폰트 크기 plt.rc('ytick', labelsize=20) # y축 눈금 폰트 크기 plt.rc('legend', fontsize=20) # 범례 폰트 크기 plt.rc('figure', titlesize=50) # figure title 폰트 크기 참고 https://bjy2.tistory.com/82
들어가기 앞서, 해당 포스트에서는 현존하는 코딩 패러다임에 대해 간단하게 다뤄보겠습니다. 절차적 프로그래밍(Procedural Programming) 절차적 프로그래밍이란, 프로그램을 재사용 가능한 함수 단위로 나누는 프로그래밍 구조를 의미합니다. 여기서 말하는 '절차'는, 순수한의미의 '절차'가 아닌, Procedual, 즉 함수를 의미합니다. 절차적 프로그래밍의 장단점은 아래와 같습니다. 장점 코드를 단위화할 수 있습니다. 단점 변수나 상수 등의 값들을 관리하는 '자료형'과 해당 자료형을 사용하는 '함수'가 분리되어 사용됩니다. 따라서, 사람들은 위 단점을 해결하기 위해, 자료형과 함수를 묶어서 사용하는 방법을 모색하게 되었습니다. 객체 지향 ..
Java와 Scala는 둘 다 JVM 위에서 실행되며, 기존의 Java 라이브러리를 그대로 사용할 수 있다는 공통점이 있습니다. 반대로 Java로 작성된 프로그램에서 Scala로 작성된 라이브러리를 사용할 수도 있습니다. Java는 객체지향을 지원하지만 Scala는 함수형과 객체지향을 모두 지원하며, Scala는 Java의 한계를 극복하기 위해 등장했습니다. Scala는 "함수형을 추구하되 객체지향도 쓸수 있다." 정도이지만, 덕분에 굉장히 강력해질 수도, 복잡해질 수도 있습니다. 해당 포스트에서는 Java와 Scala의 간단한 3가지 차이점에 대해서 다뤄보겠습니다. 1. 함수형 프로그래밍 언어 Scala는 "순수 함수"를 지향하는 함수형 프로그래밍 언어입니다. 순수 함수란? 함수의 입력이 주어지면, 항..
System.currentTimeMillis() console이 아닌 jar file을 통해 Apache Spark를 작업할 때, Spark 작업의 부분적인 실행 시간을 확인하고 싶다면, 아래와 같이 로그를 찍어가며 확인 할 수 있다. 사용 예제 // Scala에서 사용할 수 있는 Java 기반 로깅 유틸리티 import org.apache.log4j.LogManager val log = LogManager.getRootLogger // Time 측정 (ms단위) val tik0 = System.currentTimeMillis() val tik1 = System.currentTimeMillis() // 총 실행시간 (ms단위) val res = "Time taken : " + (tik1-tik0).toS..
Semantic Segmentation이란? Semantic Segmentation 은 컴퓨터비젼 분야에서 가장 핵심적인 분야 중 하나이며, 위 그림처럼, 이미지 내에 있는 물체들을 의미 있는 단위로 분할해내는 것입니다. 더 구체적으로는 아래 그림처럼, 이미지의 각 픽셀이 어느 클래스에 속하는지 예측하는 것입니다. Semantic Segmentation은 다른 컴퓨터비젼 문제들과 마찬가지로, Deep Convolution Neural Network (깊은 신경망)을 적용해서 많은 발전을 이루었습니다. 이번 포스트에서는 Semantic Segmentation 에 대해서 자세히 설명하고, 자주 활용되는 몇가지 접근방법을 알아보겠습니다. Semantic Segmentation의 의미와 목적 Semantic S..
Spark gemm Spark의 gemm 함수는 SparseMatrix * DenseMatrix를 지원합니다. 즉, Sparse Matrix와 Dense Matirx 간 곱셈을 지원하는 함수입니다. github https://github.com/apache/spark/blob/fc182f7e7f9ff55a6a005044ae0968340cf6f30d/mllib/src/main/scala/org/apache/spark/mllib/linalg/BLAS.scala#L478 알고리즘 순서 우측행렬 컬럼 기준으로 좌측행렬 컬럼이 이중포문을 이루며 곱해집니다. 우측행렬 컬럼은 Dense하게 모든 요소를 곱셈에 사용하지만, 좌측행렬 컬럼은 존재하는 요소만 곱셈에 사용합니다. 곱셈 결과값은 아래와 같은 형태로 결과 데이..
Breeze canMulM_DM Breeze의 canMulM_DM 함수는 CSCMatrix * DenseMatrix를 지원합니다. 즉, Sparse Matrix와 Dense Matirx 간 곱셈을 지원하는 함수입니다. github https://github.com/scalanlp/breeze/blob/b965a1c36e955a87fdffa1b9f5b3f44e3a5f191c/math/src/main/codegen/breeze/linalg/operators/CSCMatrixOps.scala#L647 알고리즘 순서 우측행렬 컬럼 기준으로 좌측행렬 컬럼이 이중포문을 이루며 곱해집니다. 우측행렬 컬럼은 Dense하게 모든 요소를 곱셈에 사용하지만, 좌측행렬 컬럼은 존재하는 요소만 곱셈에 사용합니다. 곱셈 결과값은..
Breeze canMulM_M Breeze의 canMulM_M 함수는 CSCMatrix * CSCMatrix를 지원합니다. 즉, Sparse Matrix 간 곱셈을 지원하는 함수입니다. github https://github.com/scalanlp/breeze/blob/b965a1c36e955a87fdffa1b9f5b3f44e3a5f191c/math/src/main/codegen/breeze/linalg/operators/CSCMatrixOps.scala#L708 Code implicit def canMulM_M[@expand.args(Int, Float, Double, Long) T] : breeze.linalg.operators.OpMulMatrix.Impl2[CSCMatrix[T], CSCMatri..
"객체 지향 프로그래밍에 대해 설명 한 번 해주세요." 여러 SW기업 신입사원 기술면접에서 워밍업 느낌으로 면접자들의 긴장을 풀어줄 겸 처음으로 자주 나오는 질문이다. 가장 기본이면서 이것마저 대답을 명확하게 못하면 첫인상이 안 좋아지는(?) 결과를 만드는 질문이며, 워밍업 같지만 꼬리에 꼬리를 무는 모든 질문의 시작(?)이다. 객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란? 객체 지향 프로그래밍은 컴퓨터 프로그래밍 패러다임중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜, 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법 이다. 이러면, 이제 꼬리에 꼬리를 무는 질문이 시작된다. "객체 지향 프로그래밍을..
오버로딩(Overloading)과 오버라이딩(Overriding) 자바에서 다형성을 지원하는 방법으로 메소드 오버로딩(Overloading)과 오버라이딩(Overriding)이 있다. 오버로딩(Overloading)과 오버라이딩(Overriding)의 개념은 다르지만, 이름이 비슷해 참 헷갈린다. 오버로딩(Overloading) : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술 오버라이딩(Overriding) : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의 해서 사용하는 기술 오버로딩(Overloading) 간단한 예제 코드를 통해 알아보자. Overloadingtest.java public class Overloadingtest { // 기본 test(..