본문으로 건너뛰기

교육 ·

비전공자 파이썬 배열(numpy) 배우는 법, 리스트로는 부족한 순간

비전공자 파이썬 배열(numpy) 배우는 법, 리스트로는 부족한 순간

비전공자 파이썬 배열(numpy) 배우는 법을 궁금해하신다면, 이미 리스트로 숫자 계산을 해보다가 뭔가 불편함을 느끼셨을 가능성이 큽니다. 리스트는 여러 값을 담는 데는 좋지만, 값 전체에 같은 계산을 한 번에 적용하려면 반복문을 돌려야 합니다. numpy 배열은 이런 계산을 반복문 없이 한 줄로 처리하도록 설계된 도구입니다.

비전공자 파이썬 리스트 배우는 법을 먼저 익히셨다면, 이번 글은 그 다음 단계로 자연스럽게 이어집니다. 엑셀로 치면 리스트는 한 줄짜리 값 모음이고, numpy 배열은 그 값 모음에 수식을 통째로 적용하는 기능이라고 보시면 됩니다.

리스트로 계산하면 왜 번거로울까요

리스트에 담긴 숫자 전체에 10을 곱하고 싶다면, 파이썬 리스트는 곱셈 연산자를 그대로 쓸 수 없습니다. 반복문으로 하나씩 꺼내 계산하고 새 리스트에 담아야 합니다. numpy 배열은 배열 자체에 연산자를 적용하면 모든 원소에 한 번에 계산이 적용됩니다.

다음은 리스트로 처리할 때와 numpy 배열로 처리할 때의 차이입니다.

# 리스트로 처리하는 경우
prices = [10000, 25000, 8000, 15000]
prices_with_tax = []
for p in prices:
    prices_with_tax.append(p * 1.1)

print(prices_with_tax)
# [11000.00000000001, 27500.0, 8800.000000000001, 16500.0]
# numpy 배열로 처리하는 경우
import numpy as np

prices = np.array([10000, 25000, 8000, 15000])
prices_with_tax = prices * 1.1

print(prices_with_tax)
# [11000. 27500.  8800. 16500.]

계산 결과는 같지만, 코드 줄 수와 실행 속도에서 차이가 납니다. 데이터가 수백, 수천 건으로 늘어날수록 이 차이는 체감됩니다.

numpy 배열, 언제 배워야 할까요

numpy를 지금 배워야 할 시점은 대략 이렇습니다. 매출, 재고, 측정값처럼 숫자로만 이루어진 데이터를 다루면서, 그 값 전체에 같은 계산(할인율 적용, 단위 변환, 평균·표준편차 계산)을 반복하고 있다면 numpy 배열을 배울 시점입니다. 반대로 이름, 주소처럼 텍스트가 섞인 데이터를 다룬다면 아직은 리스트나 딕셔너리로 충분합니다.

실무에서는 numpy를 단독으로 쓰기보다 pandas 데이터프레임의 내부 계산 엔진으로 만나는 경우가 더 많습니다. 데이터프레임의 한 열을 계산할 때 실제로는 그 안에서 numpy 배열이 동작하고 있습니다. 그래서 데이터프레임을 다루다 에러 메시지에 “numpy”라는 단어가 보이는 경우가 흔합니다.

numpy 배열, 리스트와 이렇게 다릅니다

실무 예시로 보는 numpy 배열 활용법

가장 자주 쓰이는 상황은 여러 지점이나 부서의 실적 데이터를 한 번에 비교하고 계산할 때입니다. 예를 들어 세 개 지점의 월별 매출을 2차원 배열로 만들고, 지점별 합계와 평균을 한 번에 구해보겠습니다.

import numpy as np

# 행: 지점(A, B, C), 열: 1월~4월 매출(단위: 만원)
sales = np.array([
    [320, 350, 400, 380],
    [210, 230, 250, 260],
    [500, 480, 520, 510]
])

# 지점별 합계 (행 방향, axis=1)
branch_total = sales.sum(axis=1)
print("지점별 합계:", branch_total)
# 지점별 합계: [1450  950 2010]

# 월별 평균 (열 방향, axis=0)
monthly_avg = sales.mean(axis=0)
print("월별 평균:", monthly_avg)
# 월별 평균: [343.33 353.33 390.   383.33]

# 전체 매출 중 상위 10% 이상 항목 찾기
threshold = np.percentile(sales, 90)
high_sales = sales[sales > threshold]
print("상위 매출:", high_sales)

이 코드에서 눈여겨볼 부분은 axis=0, axis=1입니다. axis는 계산을 어느 방향으로 할지 지정하는 옵션으로, 0은 위아래(열 방향), 1은 좌우(행 방향)를 의미합니다. 엑셀의 SUM 함수를 행으로 쓸지 열로 쓸지 정하는 것과 같은 개념입니다.

조건에 맞는 값만 골라내는 마지막 줄도 실무에서 자주 씁니다. sales > threshold라는 조건을 배열에 그대로 넣으면, 조건을 만족하는 값만 뽑아내는 필터 역할을 합니다. 반복문과 if문을 따로 쓰지 않아도 되는 이유가 여기 있습니다.

numpy 배열과 파이썬 리스트, 뭐가 다른가요

두 자료구조의 차이를 표로 정리하면 다음과 같습니다.

  • 리스트는 서로 다른 자료형(숫자, 문자, 리스트)을 섞어 담을 수 있지만, numpy 배열은 원칙적으로 같은 자료형만 담습니다.
  • 리스트에 곱셈이나 덧셈 연산자를 쓰면 값이 이어붙거나 반복되지만, numpy 배열은 수학 연산 그대로 적용됩니다.
  • 리스트는 데이터 개수가 많아질수록 반복문 처리 속도가 느려지지만, numpy 배열은 내부적으로 최적화된 방식으로 계산해 속도 차이가 커집니다.
  • 리스트는 1차원 구조에 익숙하지만, numpy 배열은 표(2차원), 큐브(3차원) 형태의 데이터도 자연스럽게 다룹니다.

이런 이유로 숫자 위주의 대량 데이터를 다룰 때는 리스트 대신 numpy 배열, 혹은 numpy 기반의 pandas를 쓰는 편이 낫습니다. 반대로 이메일 주소 목록을 관리하거나 파일명을 정리하는 작업처럼 텍스트 처리가 중심이라면 굳이 numpy가 필요하지 않습니다.

numpy 설치와 시작하는 법

numpy는 파이썬 기본 기능이 아니라 별도로 설치해야 하는 라이브러리입니다. pip 설치 방법을 참고해 아래 명령어로 설치할 수 있습니다.

pip install numpy

설치 후에는 스크립트 맨 위에 import numpy as np를 적어두면 됩니다. 관례적으로 numpy는 np라는 별칭으로 줄여 쓰는데, 이는 문법 규칙이 아니라 대부분의 파이썬 사용자가 따르는 관습입니다. 다른 사람이 작성한 코드를 읽을 때도 np라는 이름이 numpy를 가리킨다고 생각하시면 됩니다.

마무리하며

numpy 배열은 화려한 기능보다 계산의 효율을 위한 도구에 가깝습니다. 처음부터 모든 기능을 익히려 하기보다, 지금 반복문으로 처리하고 있는 숫자 계산 하나를 numpy 배열로 바꿔보는 것부터 시작하시는 편을 권해드립니다. 배열 연산에 익숙해지면 이후 pandas나 데이터 시각화로 넘어갈 때도 훨씬 수월합니다.

픽셀앤코드는 비전공 실무자를 위한 코딩·데이터 교육 과정에서 리스트부터 numpy, pandas까지 실제 업무 데이터를 예제로 활용한 학습 로드맵을 제공하고 있습니다. 혼자 학습하다 막히는 부분이 있다면 실무 사례 중심의 교육 커리큘럼을 통해 단계별로 채워가실 수 있습니다.