[파이썬] 넘파이 Array creation routines

InAnarchy·2023년 4월 16일
0

numpy

목록 보기
2/4
post-thumbnail

초기화되지 않은 데이터로 채워진 배열 생성

empty

  • 주어진 배열과 같은 모양/타입의 새로운 배열을 리턴
  • 초기화되지 않은 데이터로 채워짐
  • shape 파라미터에 새로운 배열의 모양 선언
  • 초기화에 시간을 소비하지 않고 빠르게 배열 생성
numpy.empty(shape, dtype=float, order='C', *, like=None)
# 형태가 (2, 3)이고 초기화되지 않은 데이터로 채워진 배열 생성
arr = np.empty((2, 3))

print(arr)
# [[0.0e+000 4.9e-324 9.9e-324]
#  [1.5e-323 2.0e-323 2.5e-323]]

empty_like

  • 주어진 배열과 같은 모양/타입의 새로운 배열을 리턴
  • 초기화되지 않은 데이터로 채워짐
  • 배열의 모든 원소를 초기화할 필요가 있는 경우 zeros_like() 또는 ones_like() 사용 권장
numpy.empty_like(prototype, dtype=None, order='K', subok=True, shape=None)
# 주어진 배열 생성
arr = np.array([[1, 2, 3], [4, 5, 6]])

# 주어진 배열과 동일한 형태와 데이터 타입을 가진 새로운 배열 생성
result = np.empty_like(arr)

print("Original array:")
print(arr)
# Original array:
# [[1 2 3]
#  [4 5 6]]

print("\nNew empty_like array:")
print(result)
# New empty_like array:
# [[62544128        0        0]
#  [       0        0        0]]

empty()와 empty_like()

  • 공통점: 초기화되지 않은 데이터로 채워진 배열을 생성하는 데 사용
  • 차이점:
    empty()는 배열의 형태와 데이터 타입을 직접 지정
    empty_like()는 기존 배열을 기반으로 동일한 형태와 데이터 타입을 가진 새로운 배열을 생성, 형태와 데이터 타입을 별도로 지정할 필요가 없음

1로 가득한 배열 생성

ones

  • 주어진 배열과 같은 모양/타입의 1로 가득한 새로운 배열을 리턴
  • shape 파라미터에 새로운 배열의 모양 선언
numpy.ones(shape, dtype=None, order='C', *, like=None)
one = np.ones(5) #array([1., 1., 1., 1., 1.])
one.shape #(5,)
one.ndim #1
one = np.ones((5,), dtype=int) # array([1, 1, 1, 1, 1])
one.shape #(5,)
one.ndim #1
one = np.ones((2, 1))
# array([[1.],
#        [1.]])
one.shape #(2, 1)
one.ndim #2

ones_like

  • 주어진 배열과 같은 모양/타입의 1로 가득한 새로운 배열을 리턴
numpy.ones_like(a, dtype=None, order='K', subok=True, shape=None)
x = np.arange(6)
x = x.reshape((2, 3))
x
# array([[0, 1, 2],
#        [3, 4, 5]])
np.ones_like(x)
# array([[1, 1, 1],
#        [1, 1, 1]])
y = np.arange(3, dtype=float)
y # array([0., 1., 2.])
np.ones_like(y) #array([1.,  1.,  1.])

ones(), ones_like()

  • 공통점: 1로 채워진 배열을 생성하는 데 사용
  • 차이점:
    ones()는 배열의 형태와 데이터 타입을 직접 지정
    ones_like()는 기존 배열을 기반으로 동일한 형태와 데이터 타입을 가진 새로운 배열을 생성, 형태와 데이터 타입을 별도로 지정할 필요가 없음

0으로 가득한 배열 생성

zeros

  • 주어진 배열과 같은 모양/타입의 0으로 가득한 새로운 배열을 리턴
  • shape 파라미터에 새로운 배열의 모양 선언
numpy.zeros(shape, dtype=float, order='C', *, like=None)
np.zeros(5) #array([ 0.,  0.,  0.,  0.,  0.])
np.zeros((5,), dtype=int) #array([0, 0, 0, 0, 0])
np.zeros((2, 1))
# array([[ 0.],
#        [ 0.]])

zeros_like

  • 주어진 배열과 같은 모양/타입의 0으로 가득한 새로운 배열을 리턴
numpy.zeros_like(a, dtype=None, order='K', subok=True, shape=None)
x = np.arange(6)
x = x.reshape((2, 3))
x
# array([[0, 1, 2],
#        [3, 4, 5]])
np.zeros_like(x)
# array([[0, 0, 0],
#        [0, 0, 0]])
y = np.arange(3, dtype=float)
y # array([0., 1., 2.])
np.zeros_like(y) # array([0.,  0.,  0.])

zeros(), zeros_like()

  • 공통점: 0으로 채워진 배열을 생성하는 데 사용
  • 차이점:
    zeros()는 배열의 형태와 데이터 타입을 직접 지정
    zeros_like()는 기존 배열을 기반으로 동일한 형태와 데이터 타입을 가진 새로운 배열을 생성, 형태와 데이터 타입을 별도로 지정할 필요가 없음

특정한 값으로 초기화된 배열 생성

full

  • 주어진 배열과 같은 모양/타입의 특정한 값으로 초기화된 새로운 배열을 리턴
  • shape 파라미터에 새로운 배열의 모양 선언
numpy.full(shape, fill_value, dtype=None, order='C', *, like=None)
np.full((2, 2), 10)
# array([[10, 10],
#        [10, 10]])
np.full((2, 2), [1, 2])
# array([[1, 2],
#      [1, 2]])

full_like

  • 주어진 배열과 같은 모양/타입의 특정한 값으로 초기화된 새로운 배열을 리턴
numpy.full_like(a, fill_value, dtype=None, order='K', subok=True, shape=None)
x = np.arange(6, dtype=int)
np.full_like(x, 1) #array([1, 1, 1, 1, 1, 1])
np.full_like(x, 0.1) #array([0, 0, 0, 0, 0, 0])
np.full_like(x, 0.1, dtype=np.double) #array([0.1, 0.1, 0.1, 0.1, 0.1, 0.1])

full(), full_like()

  • 공통점: 특정 값으로 채워진 배열을 생성하는 데 사용
  • 차이점:
    full()는 배열의 형태와 데이터 타입을 직접 지정
    full_like()는 기존 배열을 기반으로 동일한 형태와 데이터 타입을 가진 새로운 배열을 생성, 형태와 데이터 타입을 별도로 지정할 필요가 없음

대각행렬 생성

eye

  • N : row의 수
  • M : column 수(따로 설정하지 않으면 NxN의 정사각행렬)
  • k : 대각행렬이 값을 가지기 시작하는 위치(기본값은 0이며, 이 경우 주 대각선에 1이 위치)
eye(N, M=None, k=0, dtype=<class 'float'>, order='C', *, like=None)
np.eye(3, k=1)
# array([[0.,  1.,  0.],
#        [0.,  0.,  1.],
#        [0.,  0.,  0.]])
np.eye(4, 5, k=1)
# array([[0., 1., 0., 0., 0.],
#        [0., 0., 1., 0., 0.],
#        [0., 0., 0., 1., 0.],
#        [0., 0., 0., 0., 1.]])

identity

  • 항상 정사각행렬만 생성
  • 파라미터 n을 받아 n * n의 단위행렬 생성
  • 항상 주 대각선에 1이 위치
  • 기본값은 float
numpy.identity(n, dtype=None, *, like=None)
np.identity(3)
# array([[1.,  0.,  0.],
#       [0.,  1.,  0.],
#       [0.,  0.,  1.]])

eye()와 identity

  • 공통점: 모두 대각선 상의 원소가 1인 행렬을 생성
  • 차이점:
    eye()가 더 유연한 함수로 다양한 크기와 형태의 행렬을 생성
    identity()는 오직 정사각 행렬에 대해서만 단위 행렬을 생성
profile
github blog 쓰다가 관리하기 귀찮아서 돌아왔다

0개의 댓글