분류 전체보기 (369) 썸네일형 리스트형 행렬과 벡터 연산 (4) - numpy 배열을 이용한 확산 방정식 행렬과 벡터 연산 (1) - 확산 방정식 예제 행렬과 벡터 연산 (2) - 확산 방정식 순수 파이썬 구현 행렬과 벡터 연산 (3) - 파이썬 리스트와 numpy 연산 속도 차이 지난 포스트에서 numpy 배열을 이용하면 메모리의 지역성과 CPU 벡터화 기능의 장점으로 행렬/벡터 연산에서 굉장한 성능 향상을 얻을 수 있음을 보았습니다. 그렇다면 지난 번에 파이썬 리스트로 구현했던 확산 방정식을 numpy 배열을 이용해 구현해 보겠습니다. 행렬과 벡터 연산 (2) - 확산 방정식 순수 파이썬 구현 [개발 잡학/Python] - 행렬과 벡터 연산 (1) - 확산 방정식 예제 지난 포스트의 의사 코드를 기반으로 순수 파이썬으로 (특히 리스트) 구현해 보겠습니다. 먼저 행렬을 받아 변화된 상태를 반환하는 e ho.. 행렬과 벡터 연산 (3) - 파이썬 리스트와 numpy 연산 속도 차이 행렬과 벡터 연산 (1) - 확산 방정식 예제 행렬과 벡터 연산 (2) - 확산 방정식 순수 파이썬 구현 지난 포스트에서 확산 방정식을 파이썬 리스트로만 구현했습니다. 매 timestep 마다 확산을 모델링하기 위해서 grid 변수를 리스트의 리스트 형태로 구현했습니다. 하지만 파이썬의 리스트는 실제 데이터가 아닌 데이터가 저장된 위치를 가리키는 포인터를 저장합니다. 데이터 타입에 상관없이 리스트에 어떤 형태의 데이터도 저장할 수 있으나 이는 벡터, 행렬 연산에서 큰 성능 저하의 원인이 됩니다. 또한, 파이썬 바이트 코드는 벡터 연산에 최적화되지 않았기에 파이썬은 벡터 연산을 기본으로 제공하지 않습니다. Vectorization Numpy 연산이 매우 빠른 이유는 무엇일까요? 다음과 같이 50만개의 배열.. 오래된 아파트 방마다 인터넷 연결하기 (3) 오래된 아파트 방마다 인터넷 연결하기 (1) 오래된 아파트 방마다 인터넷 연결하기 (2) 이제 마무리 작업으로는 스위치 허브 포트와 통신 단자함 각 방마다 랜선을 연결하면 된다. 당장 인터넷이 필요한 부분은 거실과 서재이므로 국선/거실 서쪽/작은방에 스위치 허브를 연결한다. 이제 서재로 가 5m짜리 랜선과 usb C to LAN 젠더를 노트북에 연결하면... 이더넷이 연결된다! 후기 한 달은커녕 일주일도 안돼 서울로 돌아갈 뻔했는데 너무 다행스럽게 인터넷이 바로 연결됐다. 원래는 각 단계마다 테스트를 거치면서 천천히 진행했었어야 됐는데 시간이 너무 촉박하고 테스트를 위한 장비도 마땅치 않아 급히 진행한 것 치고는 결과가 너무 좋았다. 근데 스위치 허브 대신 공유기를 연결해야 되는 것 아닌가 생각이 불현듯.. 오래된 아파트 방마다 인터넷 연결하기 (2) 오래된 아파트 방마다 인터넷 연결하기 (1) UTP 케이블, 랜선은 POE 방식으로 전력을 전달하는데, 이걸 다시 말하면 UTP 케이블 중 파란색/갈색 POE 전원 선으로 전원을 연결하면 랜선을 통해 전력을 전달할 수 있다는 말이 된다. 따라서 밑그림과 같이 주변에 컨센트가 없는 통신 단자함에서도 DC 케이블에 전원을 직접 꼽지 않더라도 전력을 끌어올 수 있게 된다. 작업 시작 준비물 먼저 다음 포스트를 숙지하고 1) 스위치 허브, 2) 랜선 여러 개, 3) 절연 테이프, 4) 니퍼/가위/커터칼 등을 준비했다. 랜선은 일단 잘라서 연결할 것이므로 가장 싼 2M 케이블 여러 개와 방에서 노트북 연결에 사용할 5M 케이블을 준비했다. 스위치 허브는 가장 무난한 ipTIME H6005 모델을 이마트에서 샀는데.. 오래된 아파트 방마다 인터넷 연결하기 (1) 계속된 재택으로 인한 GM 타운 생활이 답답해지던 중 집안일에 있어 제주도에 갈 일이 생겼고 이김에 제주도 최소 한 달 살이를 시도해보려 오래간만에 캐리어를 들고 집을 나섰다. 익숙한 제주 집에 짐을 풀고 서재 방에 와이파이 연결은 했는데 브라우저 로딩이 뭔가 느릿느릿하다. 잊고 있었다. 제주 집은 중앙 거실에 있는 공유기 신호가 서재에서는 매우 약해 줌 회의는 할 수 없었다는 것을. 다행히 USB-c to LAN 젠더와 남는 랜선이 있어 방 인터넷 단자에 연결했더니 인터넷 연결이 안 된다...! 이틀 정도는 핸드폰 테더링으로 어찌어찌 해결했지만 연결이 가끔 끊기고 핸드폰을 가지고 다닐 때마다 재연결을 해줘야 했다. 한 달 살이 첫날부터 위기였다. 통신 단자함부터 제주 집은 오래된 아파트라 최신 아파트처.. 행렬과 벡터 연산 (2) - 확산 방정식 순수 파이썬 구현 행렬과 벡터 연산 (1) - 확산 방정식 예제 지난 포스트의 의사 코드를 기반으로 순수 파이썬으로 (특히 리스트) 구현해 보겠습니다. 먼저 행렬을 받아 변화된 상태를 반환하는 evolve 함수를 구현합니다. grid_shape = (640,640) def evolve(grid, dt, D=1.): xmax, ymax = grid_shape new_grid = [[0.,0.] * ymax for x in range(xmax)] for i in range(xmax): for j in range(ymax): grid_xx = grid[(i+1)%xmax][j] + grid[(i-1)%xmax][j] - 2. * grid[i][j] grid_yy = grid[i][(j+1)%ymax] + grid[i][(j-1.. 행렬과 벡터 연산 (1) - 확산 방정식 예제 이번 시리즈 물에서는 순수 파이썬 구현과 numpy 구현의 속도 차이가 얼마만큼 나고 이러한 차이가 왜 발생하는지 알아보려 합니다. 순수 파이썬으로 문제를 구현한 이후 지난 포스트에서 살펴본 line profiler 를 이용해 연산 속도를 점진적으로 개선시킵니다. 이후 벡터 연산을 지원하는 numpy 배열을 이용해 구현하고 얼마만큼의 속도 개선을 이룰 수 있는지 보려고 합니다. 이를 살펴보기 위한 예제로는 메모리와 연산량을 매우 많이 잡아먹는 적절한 예제가 필요하겠죠. 바로 확산 방정식입니다. 확산 방정식 확산은 유체가 공간에서 퍼지는 양상을 나타낸 수식입니다. 예를 들어 실온의 물에 물감을 몇 방울 떨어뜨리면 물감이 천천히 퍼지면서 물과 완전히 섞일 때까지 움직이는데, 물을 젓는 등의 외부 유인이 없다.. 제너레이터와 yield (3) - 지연 계산 제너레이터와 yield (1) 제너레이터와 yield (2) - 피보나치, 무한급수 현재값만 필요한 경우에 제너레이터가 속도/메모리 사용 측면에서 유리하나 제너레이터를 사용하게 되면 수열의 다른 값을 참조할 수 없기에 (현재값만 사용하여 처리하는 알고리즘을 단일 패스 (single pass) 혹은 온라인 (online) 이라 합니다) 사용하기 까다로울 수 있습니다. 이때 활용할 수 있는 모듈이 바로 itertools 입니다. itertools 모듈 이번 포스트에서는 파이썬의 itertools 내장 모듈에 대해 알아보려고 합니다. itertools는 효율적인 반복을 위한 반복기 빌딩 블록을 generator를 이용한 iterator 형태로 구성하여 빠르고 효율적으로 메 hongl.tistory.com 대용.. 이전 1 ··· 3 4 5 6 7 8 9 ··· 47 다음