파이썬
[python] 파이썬 Class 내 self.<variable name>에서 self 키워드는 어떤 역할을 할까?
파이썬 클래스를 처음 접하다보면, 추상적인 개념에 적잖이 당황할 수도 있습니다. 특히 class를 만들 때, class안에 함수를 정의할 때 self 라는 키워드를 많이 보셨을 겁니다. 이 self는 굉장히 중요한 역할을 하게 되는데, 무엇을 의미하는지 간단하게 알아보도록 하겠습니다. self라는 키워드는 클래스가 만들어진 이후, 인스턴스로서 활용될 때 굉장히 중요한 역할을 합니다. 이때 class variable과 instance variable에 대해 알아야 할 필요가 있는데, 간단하게 말해서 self가 활용된다면 이는 곧 class 전역에 영향을 미치는 것이 아닌 인스턴스에만 국한되어 작동하게 됩니다. 예시 1) class_variable vs instance_variable 코드를 보면서 살펴보겠..
[python] finally 블록 - 파이썬의 자원정리 방법
파이썬으로 작업하다보면 예외 처리시, finally 블록을 사용하는 것을 곧잘 목격할 수 있습니다. finally는 언제 사용하는 것일까요? 이 finally 블록은 예외 발생 여부와 상관없이 반드시 실행해야 할 명령을 지정합니다. 이해를 돕기 위해 예를 들어보겠습니다. 어떠한 데이터 분석과제를 위해 모든 gpu자원을 하나의 계정(user A)으로 할당해주었습니다. 그렇다면 동일한 서버 내 다른 유저(user B)는 사용중인 gpu에 접근할 수 없을 것입니다. 이때 만약에 user A가 딥러닝을 돌려놓고 밥먹으러 나갔다면, 또는 외출했다고 가정해보겠습니다. user B는 gpu를 활용해야 하지만, user A가 사용하고 있어서 활용하지 못하게 됩니다. 하지만 user A의 딥러닝 코드가 에러가 났다면, ..
[python] is 연산자란?
파이썬에서 is 연산자는 두 변수가 같은 객체를 가리키고 있는지 확인할 때 is 구문을 사용한다. 그렇다면 is 연산자와 같음을 나타내는 == 연산자의 차이점은 무엇일까? 아래 코드를 통해 이해해보자. # 3개의 리스트 생성 list1 = [1, 2, 3] # 리스트 할당 list2 = list1 # 리스트1을 대입 받는 방식으로 리스트2 생성 list3 = list1.copy() # 리스트1의 사본을 리스트3의 값으로 할당 print('list1 과 list2는 같은 객체를 가리키고 있나요? : ', list1 is list2) print('list1 과 list3은 같은 객체를 가리키고 있나요? : ', list1 is list3) print('list2 와 list3은 같은 객체를 가리키고 있나요?..
[python] 키워드 가변 인수 (keyword variable arguments)
(본 포스팅은 김상형 저자의 '파이썬 정복' 책을 참조했습니다) 파이썬을 활용하다보면 함수를 정의하거나 불러올 때 **kwargs 또는 **args와 같은 것을 곧잘 목격하셨을 거라고 생각합니다. 이 친구들은 키워드 가변 인수(keyword arguments kwargs 등으로 표기됨)를 의미하는데요. 호출원에서 여러 개의 키워드 인수를 전달하면, 인수의 이름과 값을 쌍으로 사전으로 만들어서 전달합니다. 함수 내부에서는 사전을 읽듯이 인수값을 꺼내 사용합니다. 아래 간단한 활용 예제를 살펴보겠습니다. # keyword variable argument 활용 예제 def calcstep(**args): begin = args['begin'] end = args['end'] step = args['step']..
[python] 함수 - 가변 인수
파이썬 인수에 대해 알아보겠습니다. 파이썬을 활용하다 보면, 아래와 같은 함수 방식으로 인자를 주는 것을 종종 보셨을 겁니다. # 1번 케이스 def function(*args): ...(이하 코드 생략)... # 2번 케이스 def function2(**kwargs): ...(이하 코드 생략)... 이렇게 인수 이름 앞에 * 기호를 붙이면, 이 자리에 여러 개의 인수가 올 수 있습니다. 이것을 '가변 인수'라고 지칭합니다. 가변 인수의 특징은 정해진 개수만큼의 실인수를 전달해야할 필요가 없습니다. 가변 인수는 임의 개수의 인수를 받는 다는 것이 특징입니다. 아래 예를 통해 확인해보겠습니다. def intsum(*ints): sum = 0 for num in ints: sum += num return s..
[tensorflow] 함수형 API 활용한 CNN 예시
Functional API 특징 텐서플로우에서 제공하는 가장 직관적인 Sequential 모델은 쉽고 빠르게 레이어를 쌓아 딥러닝 모델을 만들 수 있습니다. 여기서 Sequential 모델은 네트워크 입력과 출력이 하나라가 가정합니다. 그리고 많은 경우에서 이 가정이 적절합니다. 하지만 이런 가정이 맞지 않는 경우가 발생할 수 있습니다. 예를 들면 개별 입력을 여러 개 필요로 하는 네트워크이거나 여러 개를 출력하는 네트워크의 경우에는 단순히 선형적으로 층을 쌓는 sequential 모델로는 구현할 수 없습니다. 이런 경우 함수형 API를 고려합니다. 함수형 API는 다양한 경우에서 활용할 수 있습니다. 아래의 그림처럼 소셜 미디어 포스팅을 통해 나이를 예측하고, 수입을 예측하고, 성별을 예측하는 하나의 ..
[M1 맥] 스파크 설치하기 (Spark)
스파크 설치에 앞서 하둡(Hadoop) 설치와 자바(JAVA) 설치를 선행하시는 것을 추천드립니다. M1 맥북에 Hadoop 설치하기 M1 맥북에 Java 설치하기 스파크 설치 스파크 설치 시, 본인 로컬 환경에 설치되어 있는 하둡 버전을 고려하여 설치하는 것을 추천드립니다. 따라서 brew를 통한 설치 또는 묻지마 설치 보다는, 버전을 체크하고 설치를 진행하는 것이 좋습니다. 1. Apache Spark 웹사이트 이동 그렇게 하기 위해서 아파치(apache) 웹사이트로 접속하겠습니다. https://spark.apache.org/downloads.html Downloads | Apache Spark Download Apache Spark™ Choose a Spark release: Choose a pa..
[M1 Mac]oh-my-zsh 설치 이후 command not found 이슈 해결 방법
대부분의 경우 iterm2 커스터마이징을 시작하는 시기가 '맥북을 구매한 직후 환경설정 시'가 아닐까 싶다. 하지만 필자와 같이 iterm2에 dracula와 같은 theme만 입히고 사용하다가, 가독성을 이유로 oh-my-zsh를 나중에 설치하는 경우 문제가 command not found 문제가 발생할 수 있다. 개인 로컬에서 많은 프로그래밍 작업을 하다가, oh-my-zsh를 설치하게 되면 Java 경로를, conda 경로를, brew 경로를, wget 경로를 못잡아서 스트레스를 받을 수 있다. 바로 본론으로 넘어가자. iterm2 oh-my-zsh 설치 이후, 기존에 사용하던 커맨드가 안먹히기 시작했다. 이건 ~/.zshrc 파일에 설정해 둔 path가 없어져서 문제가 되는 경우이다. 따라서 pa..