[Numpy] ndarray 생성하기

Surf in Data·2022년 4월 3일
0

numpy

목록 보기
1/6
post-thumbnail

Numpy

  • 파이썬의 고성능 과학 계산용 패키지
  • Matrix와 Vector와 같은 Array 연산의 표준
  • python list 에 비해 빠르고, 메모리 효율적이다. 그 이유는 반복문 없이 데이터 배열에 대한 처리를 지원하기 때문
  • 선형대수와 관련된 다양한 기능을 제공

numpy의 호출 방법

import numpy as np

ndarray란?

  • ndarray란 numpy의 배열을 말하며 n차원의 배열 객체이다.
  • ndarray는 파이썬 리스트와 달리 하나의 데이터 타입만 배열에 넣을 수 있다.
  • ndarray는 파이썬 리스트와 달리 Dynamic typing(동적 타이핑)을 지원하지 않는다

여러 방식의 ndarray 생성법

np.array 함수로 생성하기

np.array()로 Verctor 생성

a = [1, 2, 3, 4]

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

print(array1)
print(array2)
[1 2 3 4]
[1 2 3 4]

np.array()로 Matrix 생성

a = [1, 2]
b = [3, 4]

matrix1 = np.array([a, b])
matrix2 = np.array([[1, 2], [3, 4]])

print(matrix1)
print(matrix2)
[[1 2]
 [3 4]]
[[1 2]
 [3 4]]

np.arange()로 Vector 생성

v1 = np.arange(0, 10) #0이상 10미만의 정수로 ndarray를 만들어라
print(v1)
[0 1 2 3 4 5 6 7 8 9]
v2 = np.arange(0, 10, 2) #0이상 10미만 2씩 증가하는 값의 array를 만들어라
print(v2)
[0 2 4 6 8]

np.arange로 Matrix 생성을 하고 싶다면 np.arange로 생성한 ndarray에 reshape 함수를 이용할 수 있다. 주의해야할 점은 만들고 싶은 Matrix의 원소의 개수와 arange로 생성된 ndarray의 원소의 개수가 같아야한다.

matrix_by_arange = np.arange(4).reshape((2, 2)) #reshape 함수 안에는 만들고 십은 shape의 사이즈를 넣으면된다.
print(matrix_by_arange)
[[0 1]
 [2 3]]

np.ones(), np.zeros()로 Matrix 생성

  • np.ones() : 모든 원소가 1로 채워진다.
  • np.zeros() : 모든 원소가 0으로 채워진다.
  • parameter에는 shpae를 넣어주면된다.
np.ones((3, 3))
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
np.zeros((3, 3))
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

np.full() 로 Matrix 생성

  • 모든 원소에 동일한 값으로 채워준다
np.full((3, 3), 7)
array([[7, 7, 7],
       [7, 7, 7],
       [7, 7, 7]])

np.eye()로 단위 행렬(identity matrix) 생성하기

np.eye(3, 3)
array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

np.linspace() 로 생성하기

np.linspace(0, 10, 5) # 0부터 10까지를 5등분 한다고 생각하면 된다.
array([ 0. ,  2.5,  5. ,  7.5, 10. ])

random의 서브모듈 함수로 ndarray 생성하기

rand 함수

  • 0, 1사이의 분포로 랜덤한 ndarray 생성
np.random.rand(2, 2)
array([[0.52089394, 0.36517463],
       [0.48348571, 0.14953476]])

randn함수

  • n: normal distribution(정규분포)
  • 정규분포로 샘플링된 랜덤 ndarray 생성
np.random.randn(3, 3)
array([[ 0.62869156,  1.07782007,  0.92929419],
       [ 2.74440024,  0.73328124, -0.16418343],
       [-0.78758572, -0.91650962, -0.43374428]])

randint 함수

  • 특정 정수 사이에서 랜덤하게 샘플링
np.random.randint(10, 100, (3, 3)) #low, high, shape 순서
array([[47, 49, 48],
       [69, 72, 87],
       [56, 76, 25]])

seed() 함수

  • seed 함수는 난수를 고정하는 역활은 한다. 예를 들어 random 모듈을 통해 ndarray를 생성할경우 동일한 함수로 생성해고 random모듈의
    특성상 그값은 실행할때마다 바뀌는데 그 값을 고정하는 역할을 한다.
np.random.randint(10, 100)
57
np.random.randint(10, 100)
74

위의 두 코드를 보면 동일한 코드를 사용했는데 다른 값이 반환되는것을 볼수 있다. seed함수는 이런것을 방지해준다.

np.random.seed(0) # seed함수 안의 parameter는 실험 코드 같은것이라고 생각하면 편하다
np.random.randint(10, 100)
54
np.random.seed(0)
np.random.randint(10, 100)
54

위의 두 코드를 통해 seed함수를 이용하면 random모듈을 사용하였음에도 같은 값을 반환하는것을 볼 수 있다.

choice

  • 주어진 1차원 ndarray로 부터 랜덤으로 샘플링
  • 정수가 주어진 경우, np.arange(해당숫자)로 간주
x = np.array([1, 2, 3, 4, 5, 6, 7])
np.random.choice(x, (2, 2)) # parameter replace 에 False 값을 부여하면 중복허용x
array([[6, 1],
       [4, 4]])
np.random.choice(10, (2, 2), replace=False) # argument인 10을 np.arange(10)으로 인식
array([[8, 6],
       [4, 0]])
profile
study blog

0개의 댓글