얼마 전 카페에서 공부하는 할머니라는 제목의 수필을 읽었습니다. 번역가 심혜경 선생님의 저서로, 소위 '공부가 취미가 될 수 있음'을 몸소 실천한 후기 격의 책입니다. 클래식 기타, 바이올린, 태극권, 옷 만들기, 영화, 수채화 등 정말 이게 가능한가 싶을 정도로 다양하게 공부하셨는데, 여기서 공부란 각잡고 무언가를 크게 이루는 공부가 아닙니다. 가볍게 시작하고, 아니다 싶으면 바로 그만두는, 그런 취미로서의 공부입니다. 취미로 하는 공부는 어떻게 접근하면 좋을까요? 세 가지 정도로 말할 수 있을 것 같습니다. 첫째, 공부란 쉽게 시작해야 합니다. 마음먹고 하려 한다거나, 준비할 시간이 필요하다거나, 적절한 타이밍을 기다리다 보면 결국 시작도 하기 전에 마음이 지쳐버릴지도 모릅니다. 일단 시작하고 보는 ..
컴공 비전공자로서 순수한 개인적 호기심에 검색해보고 정리한 것입니다. 틀린 내용이 있다면 언제든지 지적해주세요. 저는 조금 슬프겠지만요. Q. 컴퓨터는 어떻게 난수를 만들까? A. 컴퓨터는 난수를 만들 수 없다. 정확하게는 완벽히 예측 불가능한 난수를 외부의 도움 없이 소프트웨어만으로는 만들 수 없다. 무슨 말이냐고? 컴퓨터는 주어진 task를 주어진 조건에 따라 주어진 순서대로 실행하는 기계이다. 즉 컴퓨터는 우연에 의하는 선택을 할 수 없다. 유식한 말로는 결정적 유한 오토마타(Deterministic Finite Automata; DFA)라고 부른다.[1] 어려운 말 써서 미안하지만 사실 나도 뭔지 모르니까 그냥 그런게 있다보다 하고 넘어가자. 컴퓨터, 정확히는 소프트웨어가 하는 모든 일은 아래의 ..
※ 본 글은 realpython의 정기메일 내용을 편집, 각색 및 내용추가한 것입니다. C나 Java를 먼저 배운 분이라면 시퀀스의 아이템에 인덱스를 아래와 같은 형태로 붙일 것입니다. for i in range(len(my_items)): print(i, my_items[i]) 파이썬에는 이 코드를 간단히 만들어주는 함수가 있습니다. 바로 enumerate()입니다. names = ['Antonio', 'Carlos', 'Jobim'] for index, value in enumerate(names): print(f'{index}: {value}') enumerate()의 기본 기능은 시퀀스의 각 아이템에 인덱스를 부여하는 카운터 변수를 자동생성해주는 것입니다. 위 코드에서는 index가 그 카운터 변..
본 글은 요약본입니다. 전문은 여기를 클릭! NumPy가 리스트보다 빠른 이유는? 1. 원소의 타입 Array의 원소로 정수 하나를 저장하려고 합니다. NumPy array의 경우 정수는 내장 자료형인 int로 저장되지 않습니다. 대신 binary로 변환 후 int32(4 byte)로 캐스팅 되어 저장됩니다. 숫자가 작아서 1 byte만 필요하다면 1 byte로 변환도 할 수 있습니다. 이 경우에는 정수 하나를 저장하는 데에 딱 1 byte만 필요하겠죠. 반면 리스트에 들어가는 정수는 내장 자료형 int 타입으로 저장됩니다. 이 int 타입 하나를 저장하려면 다음 것들이 모두 필요합니다. 1) Size (4 byte) 2) Reference Count (8 byte) 3) Object Type (8 by..
흥미로운 질문을 받았습니다. 아래와 같은 구조체에서 파일명(필드명 name)이 'main.m'인 인덱스를 뽑아내려면 어떻게 할까요? 당연히 for 문을 돌리면 해결되긴 합니다만, 한줄컷으로 끝낼 방법이 있습니다. 1) {files.name}과 같은 표현식을 이용하면 files의 모든 .name 값을 하나의 셀배열에 담을 수 있습니다. 2) cellfun은 셀배열의 모든 원소에 동일한 함수를 적용하여, 그 결과를 같은 크기의 배열로 반환합니다. 3) cellfun에 쓸 함수가 이미 존재하는 함수가 아니라면 함수를 만들어서 쓰면 됩니다. 파일을 만들기 귀찮다면? 우리에겐 익명함수가 있습니다. 아이디어를 주신 MATLAB 공부방 이*규님께 감사말씀 드립니다. - 게으른 맽랩
원문: Top 5 Mistakes You Make When Declaring Functions in Python (약간의 의역을 얹었습니다.) 어떤 프로그래밍 프로젝트에서든 함수는 핵심요소입니다. 잘 만들어진 함수는 코드의 가독성을 높이고 유지보수를 쉽게 만듭니다. 반대로 함수를 엉성하게 만들면 가독성이 떨어지고 유지보수 비용이 올라갑니다. 아무리 실력좋은 프로그래머라도 시간이 지나면 자신의 코드를 잊어버리기 마련이므로, 잘 작성된 함수는 프로젝트의 가치를 올려준다고 할 수 있습니다. 물론 파이썬도 예외가 아닙니다. 함수 작성 시 흔히 범하는 실수를 소개하겠습니다. 이 실수들을 이해하고 나면 가독성과 유지보수 면에서 향상된 코드를 짤 수 있을 것입니다. "가독성은 중요하다." - 파이썬 철학 (역자 주:..
아래는 bool로 형변환을 했을 때 False가 되는 것들의 목록입니다. (출처) False로 정의된 상수들 None False 값이 0인 것들 (자료형 무관) 0 0.0 0j Decimal(0) Fraction(0, 1) 빈 시퀀스 (자료형 무관) ' ' (빈 문자열) ( ) (빈 튜플) [ ] (빈 리스트) { } (빈 딕셔너리) set( ) (빈 집합) range(0) (빈 range) 단, [( )]과 같이 빈 튜플이 들어있는 리스트는 False로 인식되지 않습니다. 빈 튜플이라는 원소가 있는 것이니까요. 주의할 점이 하나 있습니다. 위에 나온 것들이 False로 인식된다고 해서 그 자체가 False인 것은 아닙니다. 예를 들어, 빈 리스트는 bool로 형변환을 하면 False가 되지만 그 자체가..
(원문: 9 Skills That Separate Beginners From Intermediate Python Programmers) (의역을 제 마음대로 마구마구 끼얹었습니다.) 1. 로직을 이해해라. + 답부터 찾으려 하지 마라. 코드 자체보다 중요한 것은 코드의 로직을 이해하는 것이다. 로직을 이해해야 문제해결능력이 생기고 그로부터 좋은 코드와 최선의 답을 생각해낼 수 있다. 질문하기도 중요하다. 스스로 문제풀이를 시도하지 않고 답부터 찾으려 한다면, 답을 보고도 아무것도 배울 수 없다. (참고: 프로그래밍 질문 잘 하기) 2. 문제를 정확히 정의해라. (문제를 마음대로 바꾸지 마라.) 파일명에서 확장자를 추출하고 싶다면 어떻게 할까? 문자열의 마지막 세 문자를 꺼내면 될 것 같다. 그래서 아래와..
0. 들어가며 지난 글에서 cell array의 특별한 활용법을 몇 가지 말씀드렸습니다. 이번 글에서는 어떻게 그게 가능한지, 그리고 그 뒤에 숨어있는 매트랩의 흥미로운 문법에 대해 말씀드리겠습니다. 놀랄 준비 되셨나요? 그럼 시작하겠습니다. 1. deal 함수 활용하기 잘 알려지지 않은 함수가 하나 있습니다. deal 함수를 이용하면 아래와 같이 우변의 여러 값을 좌변의 여러 변수에 하나씩 집어넣을 수 있습니다. 원래는 여러 줄에 걸쳐 변수에 값을 할당해야 하지만, deal을 이용하면 한줄에 끝낼 수 있습니다. 마치 카드를 딜(deal) 하듯 변수에 값이 하나씩 들어가는 걸 볼 수 있습니다. 이 방법은 함수 내부에서 varargin을 여러 변수로 쪼갤 때 특히 강점을 발휘합니다. 또한 deal은 여러 ..