본문 바로가기

반응형

Programming

(46)
[Error 해결] spacepy install error 문제 spacepy install 중 error가 발생했는데 대충 아래와 같이 빨간 글씨로 어마무시한 분량이 출력된다.. ㄷㄷ 검색해서 이 글 저 글 보다보니 C, Fortran 문제라고 하는것 같다. 깃허브글들을 통해 해결하고자 했는데 대화만 길게 오가고 명확한 해결법이 제시된것 같지가 않아서 이 글을 올린다. spacepy를 설치하기 위해서 C, Fortran compile가 있어야 하는데 Linux에서는 없기 때문에 따로 설치를 해줘야 한다. 따라서 아래 명령어로 이 문제를 해결한다. sudo apt-get install gfortran 그리고 spacepy를 설치하기 위해 다음의 라이브러리도 추가적으로 설치해야한다. 나는 conda를 사용하므로 아래 명령어를 이용했다. conda install nump..
[python] 파이썬 print 출력방식. f-string bluese05.tistory.com/70
[python] class 기본 메서드 __init__, __getitem__ __init__, __getitem__은 기본적으로 class에 내장되어 있는 메서드로써 호출되는 방식이 다른 일반 메서드와는 다르게 정해져있다. __init__은 클래스를 생성할 때 실행되는 생성자이다. __getitem__은 클래스의 인덱스에 접근할 때 자동으로 호출되는 메서드이다. 위 예시를 보면 a = TEST()에서 생성자가 호출된것을 알 수 있고 a라는 객체에 인덱스접근할 때(a[3], a[4], a[5])마다 '__getitem__메서드 호출' 이 출력되는걸 보아 __getitem__메서드가 호출되는 것을 알 수 있다. 이 두 메서드를 보면 다른 __(???)__ 꼴의 메서드들도 매개인자로 호출이 아닌, 정해진 방식대로 호출하면 동작할 것이라는 것을 예상할 수 있다.
[편미분] sympy와 diff를 이용한 편미분 sympy를 이용하면 변수가 여러개인 식이라도 특정 변수에 대해 편미분이 가능하다. 또한 편미분 후 값을 대입하여 결과도 확인이 가능하다.
[merge sort] 머지소트 개념 및 구현 merge sort 개념 퀵소트처럼 대표적인 divide & conquer 알고리즘 중 하나. merge sort는 퀵소트와 비교했을 때, 안정적으로 nlogn의 시간복잡도를 내는 알고리즘이다. 퀵소트, 힙정렬에 비해서 메모리사용량이 더 많다. 평균적으로는 퀵소트보다 더 오래걸린다. 따라서 특수한 케이스가 아니라면 머지소트보다는 퀵소트를 더 많이 사용한다. 머지소트개념은 나누어서 정리해서 합친다는 개념이다. 여기서는 더 이상의 개념설명은 하지 않겠다. merge sort 구현 머지소트를 구현함에 있어서 나는 두가지 방법으로 접근했다.(결과는 같다) 1. 직관적, 순차적인 접근 : divide를 최소단위가 될 때 까지 시행하고서 conquer하는 접근 2. 재귀적인 접근 : divide를 해서 두 개의 p..
[퀵소트 구현] 퀵소트 구현, 최악의 케이스 직접 확인 퀵소트는 평균 시간복잡도가 nlogn인 알고리즘이지만 최악의 경우의는 n^2 의 시간복잡도를 가진다고 한다. 최악의 케이스를 가지는 경우는 배열이 이미 정렬되어있는 경우이다. 이 때, 배열이 오름차순으로 정렬되어있든, 내림차순으로 정렬되어있든 상관없다. 마찬가지로 배열이 모두 같은 값을 가진다고 해도 적용이 된다. 만약 모두 10이라는 값을 가지고 있는 배열도 이미 정렬되어있는 배열이나 마찬가지이기 때문이다. 1. 시간복잡도 계산법 간단하게 생각해서 n개의 데이터에 대해 divde&conquer를 몇번 수행하느냐만 알면 된다. 평균적으로 divide&conquer가 log(n)번 수행되기 때문에 퀵소트의 평균 시간복잡도가 nlog(n)인 것이다. 그런데 최악의 경우에는 divide&conquer가 log..
[자료형 변환] string to int, string to double string
[C++ / 구조체 생성자] 구조체를 이름 없이 사용하고 간단하게 값을 할당하고 싶을 때 다음을 구조체 생성자라고 한다. coordinate(double dI, double dJ) : typedef struct coordinate { coordinate(double dI, double dJ) : i(dI), j(dJ) {} double i; // i == y == v == row double j; // j == x == u == col }dCoordinate; 다음과 같이 선언하면 dI를 i에 넣고, dJ를 j에 할당하겠다는 뜻이고, 클래스의 생성자 처럼 사용이 가능하다. 즉, coordinate 구조체를 사용할 때 원래 다음과 같이 사용했다면 구조체 생성자를 이용하면 다음과 같이 초기화가 가능하다. 그리고 이는 객체이름을 따로 설정할 필요가 없을 때, 다음과 같이 사용할 수 있어서 편리하다..

반응형