ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 해결법

파이썬에서 이미지나 리스트 등 array 형태의 무언가를 다루다 보면 다음과 같은 에러가 발생합니다. ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 에러의 뜻은 말 그대로 "하나 이상의 원소를 가진 array의 참값은 판정하기 모호하니까, 하나의 값으로 줘라~" 이겁니다. 예시를 들자면 다음과 같습니다. 어떤 이미지가 다른 이미지와 같다는 조건문을 넣고 싶을 때, img1 = cv2.imread("car.png") img2 = cv2.imread("car.png") if img1 == img2: print("같은 그림") -------------------------..

python 에러: UnboundLocalError: local variable 'tmp' referenced before assignment

파이썬 코드를 짜다 보면 아래 에러를 맞이할 때가 있습니다. UnboundLocalError: local variable 'tmp' referenced before assignment 이 말은 "tmp 라는 변수를 함수 밖에서 선언해놓고 왜 여기서 써?"라는 의미입니다. 아래 내용을 봅시다. >>> tmp = "hi" >>> def hi(): ... tmp = tmp + 'nice' ... >>> hi() Traceback (most recent call last): File "", line 1, in File "", line 2, in hi UnboundLocalError: local variable 'tmp' referenced before assignment python에서 tmp라는 변수를 선언한..

python natsort로 파일을 "이름 순으로" 정렬해보자

python으로 데이터를 다룰 때 파일 경로의 리스트를 읽어오는 불러오는 경우가 많습니다. 저는 파일 이름을 순서대로 정렬해 가져와야 했습니다. 이 단순한 작업이 겉으로는 쉬워 보이지만, 처음에는 많이 헤매었습니다. 그래서 해결방법을 공유하고자 합니다. 시간이 없으신 분들은 가장 아래 코드만 보시면 됩니다. 파일 경로를 리스트로 받아올 때 문제점 예시 폴더에 1부터 22까지 번호가 매겨진 jpg 파일을 넣어놓았습니다. data - 1.jpg - 2.jpg - 3.jpg ... - 20.jpg - 21.jpg - 22.jpg python 내에서 이 파일들의 경로를 순차적으로 가져오기위해 os.listdir를 이용해봅니다. import os a = os.listdir('data') print(sorted(a..

vscode에서 black으로 code format 자동화하기 (python)

이번 게시물에선 python의 강력한 code formatter인 black을 vscode에서 사용해보도록 하겠습니다. 기업의 개발팀에서는 큰 규모의 코드를 다루다 보니, 코드 통일 및 재사용을 위해 code convention을 진행하고 code style이나 format를 설정합니다. black은 파이썬 코드 스타일인 pep8에 따라 코드를 자동으로 포맷해줍니다. 따라서 일일이 손으로 형식을 맞춰줄 필요가 없고, 생각보다 직관적으로 코드를 변환해줍니다. 0. vscode에 python Extension 설치하기 이 단계는 vs code를 사용하는 python 개발자라면 필수이기 때문에 생략하겠습니다. 1. 현재 작업 환경에 black 패키지 설치하기 우선 pip를 통해 black을 설치합니다. 호스트..

vscode n번째 글자에 세로선 추가하기 (easy)

보기좋은 코드를 작성하기위해 최대 코드 길이를 지정해놓은 분들이 계실겁니다. 보통 pep8이나 google python 가이드를 따르면서 최대 79자, 80자, 100자, 120자 등 개발자나 팀마다 다르게 다양한 코드 길이를 사용합니다. 오늘은 vscode에서 간단한 세팅으로 원하는 maximum line length에 표시를 해봅시다. (10초만에 설정 가능합니다.) 1. vscode를 켜고 F1을 눌러 settings.json 파일을 엽니다. Preferences: Open Settings (JSON)을 클릭. 환경에 따라 다른 파일도 가능합니다. 2. editor.ruler를 추가합니다. 아래 내용을 settings.json에 삽입합니다. { ... "editor.rulers": [ { "colu..

python split-folders로 이미지 데이터 분리하기 (train/val/test)

이미지 데이터셋은 보통 한 폴더 안에 몽땅 담겨 있습니다. 딥러닝 네트워크를 학습하고 평가 및 검증하기 위해선 이 데이터를 분리해야 하는데요. 그럴 때 유용한 python 라이브러리가 있습니다. 바로 split-folders입니다. pip install split-folders pip install split-folders[full] # progress bar를 보고 싶을때 사용법은 간단합니다. split-folders를 적용하기전 데이터의 디렉터리 구조는 다음과 같아야 합니다. input/ class1/ img1.jpg img2.jpg ... class2/ imgWhatever.jpg ... ... split-folders에는 데이터를 나누기 위한 방법이 두 가지 있습니다. 1. 비율로 나누기 impo..

TPOT을 이용한 머신러닝 자동화 (AutoML with python), 파라미터 튜닝까지

최근 들어 automl 패키지를 사용해보면서 편리함을 많이 느끼고 있습니다. tpot, autokeras, auto-sklearn, nni 등 다양한 automl 패키지들이 개발되고 있는데요. 본 게시물에서는 github star 기준으로 3위에 머무르고 있는 TPOT에 대해서 적어보고자 합니다. TPOT 소개 TPOT은 딥러닝 모델보단 트리 기반 모델 혹은 회귀 모델에 특화되어있습니다. 물론 특정 configuration을 지정해줌으로써 딥러닝 학습도 가능합니다. Windows 운영체제에서 사용할 수 있는 가장 간단하고 성능 좋은 automl 패키지라고 생각합니다. TPOT은 수천개에 달하는 pipeline을 탐색해서 최적의 성능을 내는 모델을 찾습니다. 심지어 최적의 모델을 짤 수 있는 코드도 짜줍니..

python joblib으로 병렬 프로그래밍을 해보자

효율적인 프로그래밍을 위해 병렬 프로그래밍을 하곤 합니다. 특히 대용량의 데이터을 처리할 때 필수적이죠. joblib은 파이썬 프로그래밍에서 병렬처리를 가능하게 만들어줍니다. 파이썬에는 병렬 연산을 위한 디폴트 패키지로 multiprocessing이 있습니다. multiprocessing은 pandas의 DataFrame을 다루는 데에 유용하며, joblib은 일반적인 python 코딩에 두루두루 쓰입니다. joblib의 dump, load 메소드는 python 객체를 저장하거나 불러오게끔 할 수 있기에, 머신러닝 프로젝트에서 모델을 저장하기에 유용하게 쓰이지만, 본 게시물에서는 병렬 처리를 도와주는 joblib의 Parallel, delayed에 대한 설명을 하겠습니다. 😁 설치 pip install ..

python *args **kwargs 차이

python 함수에 인자를 넣는 방법에는 단순한 방법도 있지만, *args와 **kwargs를 활용할 수도 있습니다. *args *args는 동시에 여러 입력값을 주고 싶을 때 사용합니다. 사실 * 다음에오는 args가 아니어도, elements, argument, ggggg, ksdfkjasdlfkja 등 원하는 변수를 사용하면 됩니다. **kwargs도 마찬가지입니다. *args를 사용하면 함수 내에서 tuple처럼 사용 가능합니다. 입력값을 굳이 list나 tuple로 주지 않아도 됩니다. **kwargs keyword arguments로 생각하시면 됩니다. *args에서 더 나아가 입력값의 키워드를 함께 줄 때 사용합니다. **kwargs를 이용하면 특정 조건에 따라 다른 동작을 하도록 코드를 짤..

Python 데이터의 요소 카운트하기 (Counter)

코딩이나 데이터 분석을 하다 보면 가지고 있는 데이터에 각 요소가 얼마큼 들어있는지 확인해야하는 상황이 생깁니다. list1 = ['참치', '참치', '고등어', '육개장', '육개장', '오징어', '육개장'] list2 = ['팔보채', '육개장', '라면', '라면', '고등어', '고등어', '고등어'] text = """ 공매도 세력 공격까지 받는 카카오. 16일 카카오 주가는 전날보다 0.82% 하락한 12만1500원에 마감했지만, 네이버는 오히려 0.37% 오른 40만2000원으로 거래를 마쳤다. 규제 문제가 발생되기 직전인 지난 7일부터 16일까지 네이버의 시가총액은 73조150억원에서 66조339억원으로 10%(6조9811억원) 감소한 반면, 카카오는 68조4848억원에서 54조665억..