NumPy array란 | 파이썬 리스트와 차이, 벡터 연산까지 정리

데이터 분석을 하다 보면 파이썬 리스트보다 먼저 보게 되는 자료형이 있다. 바로 **NumPy의 array**다.

처음 보면 리스트랑 비슷하게 생겼는데, 실제로는 목적이 다르다.

파이썬 리스트가 범용적으로 여러 값을 담는 자료형이라면, NumPy array는 수치 연산을 빠르고 일관되게 처리하기 위한 자료형에 더 가깝다.

특히 데이터 분석이나 행렬 계산, 벡터 연산이 필요한 순간부터는

리스트보다 NumPy array가 훨씬 자연스럽다.

이 글에서는 아래 3가지만 정리한다.

  • NumPy array가 왜 필요한가
  • 파이썬 리스트와 정확히 뭐가 다른가
  • 실제 코드에서는 어떤 차이가 나는가

NumPy array가 필요한 이유

파이썬 리스트도 여러 값을 담을 수 있다.

a = [100, 200, 300, 400, 500]
print(a)

여기까지는 아무 문제가 없다.

그런데 모든 원소에 같은 계산을 한 번에 적용하려고 하면 얘기가 달라진다.

예를 들어 “모든 값에 5를 더하고 싶다”면,

리스트는 보통 직접 반복해야 한다.

a = [100, 200, 300, 400, 500]
result = [x + 5 for x in a]
print(result)

NumPy array는 이걸 더 직접적으로 표현할 수 있다.

import numpy as np

a = np.array([100, 200, 300, 400, 500])
print(a + 5)

즉, NumPy array는

**“원소 하나씩 꺼내서 계산한다”**보다

**“배열 전체에 같은 연산을 적용한다”**는 쪽에 더 잘 맞는다.

이게 NumPy를 쓰는 가장 큰 이유다.


정답처럼 먼저 보는 기본 코드

NumPy array는 보통 이렇게 만든다.

import numpy as np

a = np.array([1, 2, 3, 4, 5])

print(a)
print(type(a))

출력은 대략 이런 식이다.

[1 2 3 4 5]
<class 'numpy.ndarray'>

즉, 리스트를 np.array()로 감싸면 NumPy가 제공하는 배열 자료형 ndarray가 된다.


리스트와 가장 큰 차이: 벡터 연산

리스트와 NumPy array를 비교할 때

제일 먼저 봐야 하는 건 벡터 연산이다.

파이썬 리스트

a = [1, 2, 3]
# print(a + 5)  # 에러

리스트는 숫자 5를 전체 원소에 더하는 연산을 지원하지 않는다.

NumPy array

import numpy as np

a = np.array([1, 2, 3])
print(a + 5)   # [6 7 8]
print(a * 10)  # [10 20 30]

이건 데이터 분석에서 엄청 중요하다.

왜냐하면 실제로는

  • 매출 전체에 세율 적용
  • 특정 컬럼 전체를 정규화
  • 수치 데이터 전체에 로그 변환
  • 행렬/벡터 계산

이런 식으로 배열 단위 연산이 계속 나오기 때문이다.


리스트와 NumPy array 차이 한 번에 보기

1. 자료형 목적이 다르다

리스트

  • 범용 자료형
  • 숫자, 문자열, 리스트 등 여러 타입을 섞을 수 있음
  • 수치 연산 특화는 아님

NumPy array

  • 수치 연산 중심
  • 보통 같은 타입의 값들을 다룸
  • 벡터/행렬 연산에 강함

2. 전체 원소에 같은 연산을 적용하는 방식이 다르다

리스트

a = [1, 2, 3, 4, 5]
result = [x * 2 for x in a]
print(result)

NumPy array

import numpy as np

a = np.array([1, 2, 3, 4, 5])
print(a * 2)

리스트는 결국 반복을 직접 표현해야 하고,

NumPy는 배열 전체에 연산을 바로 적용한다.


3. 차원 정보를 직접 가진다

이건 꽤 중요하다.

리스트도 중첩해서 2차원처럼 쓸 수는 있다.

m = [[1, 2, 3], [4, 5, 6]]

근데 리스트는 “이게 2차원 데이터다”를 자료형 수준에서 강하게 관리하는 쪽은 아니다.

반면 NumPy array는 차원 정보를 명확히 가진다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

print(arr.ndim)   # 차원 수
print(arr.shape)  # 배열 모양
print(arr.dtype)  # 자료형

출력 예시는 대략 이렇다.

2
(2, 3)
int64

즉 NumPy는 단순히 값만 담는 게 아니라

이 배열이 몇 차원이고, 모양이 어떻고, 자료형이 뭔지를 같이 관리한다.


자주 쓰는 NumPy 기본 코드

1. np.array()

리스트를 배열로 바꾼다.

import numpy as np

a = [10, 20, 30]
a_arr = np.array(a)

print(a_arr)

2. np.arange()

규칙적인 숫자 배열을 만들 때 자주 쓴다.

import numpy as np

print(np.arange(0, 51, 10))

출력:

[ 0 10 20 30 40 50]

이건 range()랑 비슷해 보이지만,

결과가 리스트가 아니라 NumPy array라는 점이 다르다.


3. 배열끼리 연산

길이가 맞으면 원소별로 계산된다.

import numpy as np

x = np.array([1, 2, 3, 4, 5])
y = np.array([10, 20, 30, 40, 50])

print(x + y)

출력:

[11 22 33 44 55]

4. 불리언 인덱싱

조건에 맞는 값만 뽑을 수도 있다.

import numpy as np

arr = np.array([1, 3, 5, 7, 9])
print(arr[arr < 5])

출력:

[1 3]

이건 나중에 데이터 필터링할 때 진짜 자주 쓰인다.


2차원 배열에서는 접근 방식도 조금 다르다

파이썬 리스트는 보통 이렇게 접근한다.

m = [[1, 2, 3], [4, 5, 6]]
print(m[0][1])   # 2

NumPy는 이것도 가능하지만,

보통 이렇게도 많이 쓴다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[0, 1])   # 2

즉, 차원을 가지는 배열이라는 점 때문에

좌표처럼 한 번에 접근할 수 있다.

이 차이는 나중에 2차원, 3차원 데이터를 다룰수록 더 크게 느껴진다.


구현 포인트

1. NumPy array는 “값 모음”보다 “연산 가능한 배열”로 보는 게 맞다

리스트와 겉모양이 비슷해서

처음엔 그냥 다른 버전 리스트처럼 보일 수 있다.

근데 핵심은 거기에 있지 않다.

NumPy array는

수치 연산을 직접적으로 표현하기 위해 만든 배열 자료형이다.

즉, 이걸 이해할 때는

“리스트 대체품”보다

“벡터/행렬 계산용 기본 도구”로 보는 게 더 정확하다.


2. 데이터 분석에서는 개별 원소보다 배열 단위로 생각하는 경우가 많다

리스트를 쓰면 보통

원소 하나하나를 반복하면서 처리하는 사고방식이 먼저 나온다.

반면 NumPy는

“이 배열 전체에 같은 연산을 적용한다”는 식으로 생각하게 만든다.

예를 들어

sales = np.array([100, 120, 90, 150])
taxed = sales * 1.1

이런 식이 훨씬 자연스럽다.


3. dtype, shape, ndim은 꼭 봐야 한다

NumPy를 처음 쓸 때는

값만 보는 경우가 많은데,

실제로는 이 3개가 되게 중요하다.

print(arr.dtype)
print(arr.shape)
print(arr.ndim)

이걸로

  • 자료형이 뭔지
  • 몇 행 몇 열인지
  • 몇 차원인지

를 바로 알 수 있다.

배열 다루다가 꼬이면

이 3개부터 찍어보는 습관이 꽤 도움이 된다.


정보 전달 기준으로 정리하면

이 글에서 기억할 핵심은 세 가지다.

1. 리스트는 범용 자료형, NumPy array는 수치 연산 중심 자료형

둘은 비슷해 보여도 목적이 다르다.

2. NumPy array는 배열 전체에 연산을 한 번에 적용할 수 있다

이게 데이터 분석에서 제일 강력하다.

3. NumPy는 차원 정보를 직접 관리한다

그래서 2차원, 3차원 데이터로 갈수록 리스트보다 훨씬 자연스럽다.


한 줄 정리

NumPy array는 파이썬 리스트처럼 값을 담는 자료형이면서도, 벡터 연산과 차원 정보를 기반으로 수치 계산을 훨씬 자연스럽게 처리할 수 있는 배열 자료형이다.