[Python] NumPy 배열 생성

참조


NumPy 특징

  • Numerical Python의 약자
  • 고성능 과학 계산용 패키지로 강력한 N차원 배열 객체
  • 범용적 데이터 처리에 사용 가능한 다차원 컨테이너
  • 정교한 브로드캐스팅(broadcasting) 기능
  • 파이썬의 자료형 list와 비슷하지만, 더 빠르고 메모리를 효율적으로 관리
  • 반복문 없이 데이터 배열에 대한 처리를 지원하여 빠르고 편리
  • 데이터 과학 도구에 대한 생태계의 핵심을 이루고 있음
import numpy as np
print(np.__version__)
1.22.2

리스트로 배열 만들기

  • 1차원, 2차원, 3차원 배열 numpy로 만들기
import numpy as np

# 1차원
a1 = np.array([1,2,3,4,5])

print(a1)
print(type(a1))
print(a1.shape)
print(a1[0], a1[1], a1[2], a1[3], a1[4])

a1[0] = 4
a1[1] = 5
a1[2] = 6

print(a1)

# 2차원
a2 = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a2)
print(type(a2))
print(a2.shape)
print(a2[0, 0], a2[1, 1], a2[2, 2])

# 3차원
a3 = np.array([ [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ],
                [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ],
                [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] ])
print(a3)
print(type(a3))
print(a3.shape)
[1 2 3 4 5]
<class 'numpy.ndarray'>
(5,)
1 2 3 4 5
[4 5 6 4 5]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
<class 'numpy.ndarray'>
(3, 3)
1 5 9
[[[1 2 3]
  [4 5 6]
  [7 8 9]]

 [[1 2 3]
  [4 5 6]
  [7 8 9]]

 [[1 2 3]
  [4 5 6]
  [7 8 9]]]
<class 'numpy.ndarray'>
(3, 3, 3)

배열 생성 및 초기화

  • zeros() : 모든 요소를 0으로 초기화
import numpy as np

print(np.zeros(10))
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
  • ones() : 모든 요소를 1로 초기화
import numpy as np

print(np.ones(10))
print(np.ones((3, 3)))
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
  • full() : 모든 요소를 지정한 값으로 초기화
import numpy as np

print(np.full((3, 3), 1.23))
[[1.23 1.23 1.23]
 [1.23 1.23 1.23]
 [1.23 1.23 1.23]]
  • eye() : 단위행렬(identity matrix) 생성
    • 주대각선의 원소가 모두 1이고 나머지 원소는 모두 0인 정사각 행렬
import numpy as np

print(np.eye(3))
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]
  • tri() : 삼각행렬 생성
import numpy as np

print(np.tri(3))
[[1. 0. 0.]
 [1. 1. 0.]
 [1. 1. 1.]]
  • empty() 초기화되지 않은 배열 생성
    • 초기화가 없어서 배열 생성비용 저렴하고 빠름
    • 초기화되지 않아서 기존 메모리 위치에 존재하는 값이 있음
import numpy as np

print(np.empty(10))
[            nan 0.00000000e+000 7.66605269e-312 2.02369289e-320
 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000
 0.00000000e+000 0.00000000e+000]
  • _like() : 지정된 배열과 shape가 같은 행렬 생성
    • np.zeros_like()
    • np.ones_like()
    • np.full_like()
    • np.empty_like()
import numpy as np

a1 = np.array([1,2,3,4,5])
a2 = np.array([[1,2,3], [4,5,6], [7,8,9]])
a3 = np.array([ [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ],
                [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ],
                [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] ])

print(a1)
print(np.zeros_like(a1))

print(a2)
print(np.ones_like(a2))

print(a3)
print(np.full_like(a3, 5))
[1 2 3 4 5]
[0 0 0 0 0]
[[1 2 3]
 [4 5 6]
 [7 8 9]]
[[1 1 1]
 [1 1 1]
 [1 1 1]]
[[[1 2 3]
  [4 5 6]
  [7 8 9]]

 [[1 2 3]
  [4 5 6]
  [7 8 9]]

 [[1 2 3]
  [4 5 6]
  [7 8 9]]]
[[[5 5 5]
  [5 5 5]
  [5 5 5]]

 [[5 5 5]
  [5 5 5]
  [5 5 5]]

 [[5 5 5]
  [5 5 5]
  [5 5 5]]]

생성한 값으로 배열 생성

  • arange() : 정수 범위로 배열 생성
import numpy as np

print(np.arange(0, 30, 2))
[ 0  2  4  6  8 10 12 14 16 18 20 22 24 26 28]
  • linspace() : 범위 내에서 균등 간격의 배열 생성
import numpy as np

print(np.linspace(0, 1, 5))
[0.   0.25 0.5  0.75 1.  ]
  • logspace() : 범위 내에서 균등 간격으로 로그 스케일로 배열 생성
import numpy as np

print(np.logspace(0.1, 1, 20))
[ 1.25892541  1.40400425  1.565802    1.74624535  1.94748304  2.1719114
  2.42220294  2.70133812  3.0126409   3.35981829  3.74700446  4.17881006
  4.66037703  5.19743987  5.79639395  6.46437163  7.2093272   8.04013161
  8.9666781  10.        ]

랜덤값으로 배열 생성

  • random.random() : 랜덤한 수의 배열 생성
import numpy as np

print(np.random.random((3, 3)))
[[0.06362289 0.17639034 0.20772193]
 [0.46259879 0.01849664 0.71713721]
 [0.18442221 0.0192996  0.89682728]]
  • random.randint() : 일정 구간의 랜덤 정수의 배열 생성
import numpy as np

print(np.random.randint(0, 20, (3, 3)))
[[ 7  7  7]
 [ 9 11  6]
 [13  8  8]]
  • random.normal() : 정규분포(normal distribution)를 고려한 랜덤한 수의 배열 생성
  • 평균=0, 표준편자=1, 3 x 3 배열
import numpy as np

print(np.random.normal(0, 1, size=(3, 3)))
[[-1.27090314 -1.93107198  1.56060114]
 [-1.29111149  1.13583817 -0.77591768]
 [ 0.34463078  1.04852529 -0.41318812]]
  • random.rand() : 균등 분포(uniform distribution)를 고려한 랜덤한 수의 배열 생성
import numpy as np

print(np.random.rand(3, 3))
[[0.35351844 0.67890674 0.33750517]
 [0.57890248 0.3771841  0.52225883]
 [0.9586426  0.32283958 0.10608405]]
  • random.randn() : 표준 정규 분포(standard normal distribution) 를 고려한 랜덤한 수의 배열 생성
import numpy as np

print(np.random.randn(3, 3))
[[ 1.1651261   0.88818894 -1.4852731 ]
 [-0.28870676 -0.4648225   0.66069888]
 [-0.40455942 -0.37380948 -0.28366699]]

표준 데이터 타입

import numpy as np

print(np.zeros(20, dtype=int))

print(np.ones((3,3), dtype=bool)) # 1은 True를 의미

print(np.full((3,3), 1.0, dtype=float))
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

[[ True  True  True]
 [ True  True  True]
 [ True  True  True]]

[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

날짜/시간 배열 생성

import numpy as np

date = np.array('2022-02-18', dtype=np.datetime64)
print(date)

print(date + np.arange(12))

datetime = np.datetime64('2022-02-18 12:00')
print(datetime)

datetime = np.datetime64('2022-02-18 12:00:32.43', 'ns')
print(datetime)
2022-02-18

['2022-02-18' '2022-02-19' '2022-02-20' '2022-02-21' '2022-02-22'
 '2022-02-23' '2022-02-24' '2022-02-25' '2022-02-26' '2022-02-27'
 '2022-02-28' '2022-03-01']

2022-02-18T12:00

2022-02-18T12:00:32.430000000

728x90

'파이썬(Python)' 카테고리의 다른 글

[Python] NumPy 배열 값 삽입/수정/삭제/복사  (0) 2022.02.18
[Python] NumPy 배열 조회  (0) 2022.02.18
[Python] 라이브러리  (0) 2022.02.09
[Python] 내장 함수  (0) 2022.02.09
[Python] 예외 처리  (0) 2022.02.08

이 글을 공유하기

댓글

Designed by JB FACTORY