2일차) 넘파이 (2) - 下

BinBin·2022년 1월 2일
1

머신러닝 공부

목록 보기
4/10
post-thumbnail

저번 포스팅에 이어 이번에는 쉽게 ndarray를 생성하는 템플릿 같은 함수에 대해 알아보겠습니다.

연속된 숫자의 ndarray를 원한다면? -> arange

파이썬에는 range라는 함수가 있습니다.

이 함수는 반복문에서 아주 자주 쓰이는 함수로 연속된 숫자를 생성하는 기능을 합니다.
예시를 보자면

print(list(range(10)))

이렇게 작성을 해서 실행해보면

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

이렇게 반환이 됩니다.

arange함수도 range와 거의 똑같은 기능을 하는데 차이점으로는 arange는 ndarray를 생성합니다.

arange는 넘파이 함수이니 앞에 np를 붙이는 식으로 작동하는데
이것도 예시를 보자면

import numpy as np

array1 = np.arange(10)

print(array1)

이 코드를 실행하면 위에 있는 range함수의 예시와 똑같은 값이 나오게 됩니다.

또한 숫자의 간격도 지정해줄 수 있는데 arange(a, b, c)로 가정한다면
a부터 b - 1의 숫자까지 c의 간격으로 출력하게됩니다.

array1 = np.arange(1, 10, 2)
print(array1)
[1 3 5 7 9]

위의 예시처럼 1부터 10보다 1작은 수, 즉 9까지 2씩 띄워져서 출력이 됩니다.

중요!! 파이썬은 숫자를 0부터 세기 때문에 위의 예시처럼 arange(10)을 하게 되면 1~10까지가 아닌 0~9까지 나오게 됩니다. 나중에 포스팅할 인덱싱에서도 이 법칙이 적용되므로 꼭 기억하시기 바랍니다!!

이번에는 0과 1만으로 구성이 된 ndarray를 생성하는 함수 두가지에 대해 알아보겠습니다.

[0,0,0,0,0,0,0,0,0,0,0,0] -> zeros ⭕

zeros( )도 위의 arange( )와 마찬가지로 np.zeros라는 형태로 쓰여져 0으로만 되어있는 ndarray를 생성합니다. 거기다 shape까지 지정해줄 수 있어서 여러 차원의 데이터로도
생성할 수 있어 자주 사용이 되는 함수입니다.

array0 = np.zeros((2, 2, 2))
print(array0)
output

[[[0., 0.],
  [0., 0.]],

 [[0., 0.],
  [0., 0.]]]

이처럼 2 x 2 x 2 형태의 ndarray를 생성했습니다.

이때 데이터 타입도 'dtype='이라고 뒤에 추가적으로 적어 원하는 종류의 데이터 타입으로 설정할 수도 있습니다. 디폴트 값은 위 아웃풋을 보시면 아시겠지만 float64로 지정이 됐습니다.

[1, 1, 1, 1, 1, 1, 1, 1] -> ones

ones 또한 zeros와 마찬가지로 1로만 구성이 되어있는 ndarray를 생성합니다.

array1 = np.ones((2, 2, 2))
print(array1)
output

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

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

[?, ?, ?, ?, ?, ?, ?] -> empty

이것도 설명을 할까 말까 하다가 그냥 하게 되었습니다.
<파이썬 머신러닝 완벽가이드>에는 없지만 그냥 이런 것도 있구나 하시면서 보면 됩니다.

분명 이름은 empty인데 사실 빈 ndarray가 아니라 무작위 값이 나오게 됩니다.
위에서 설명한 zeros나 ones는 메모리를 초기화해서 0이나 1로 반환을 하는 방식인데 empty는 초기화를 하지 않고 그대로 반환을 해서 매번 실행할 때 마다 다른 값이 나오게 됩니다.

array_empty = np.empty((2, 2))
print(array_empty)
output

[[5.e-324, 4.e-323],
 [2.e-323, 2.e-323]]

이렇게 이상한 값이 나와서 실제로는 잘 사용하지 않는 함수입니다.

[?, ?, ?, ?, ?, ?, ?] -> random.rand( )

이번에는 empty와는 또다른 무작위 ndarray 생성 함수를 소개하겠습니다.

이름 그대로 random이라 완전히 무작위로 생성을 하지만 수치의 범위는 항상
0이상 1 미만으로 고정이 되어 있습니다.

np.random.rand( )의 형식으로 사용할 수 있는데 괄호 안에는 ndarray의 shape를
지정해주시면 됩니다.

array_empty = np.random.rand(2, 2)
print(array_empty)
output

[[0.00141862 0.5446064 ]
 [0.75099374 0.40576041]]

이렇게 0이상 1미만의 숫자로만 이루어져 있는 ndarray를 생성할 수 있습니다.

random.rand( )같은 함수를 난수 생성 함수라고도 부르는데 이것 말고도 여러가지가
있어서 나중에 따로 난수 생성 함수의 종류에 대해서 설명해보겠습니다.

profile
빅데이터에 관심이 많은 대학생입니다

0개의 댓글