1_1_Making_ndarray1

NumPy Master Class

Notebook1 Making ndarray1

Numpy에서 다루는 data structure는 ndarray라고 부른다. 그리고 이 ndarray를 만드는 방법은 다양하다. 이번 notebook에서는 ndarray를 만들 때 가장 많이 사용되는 5가지 방법을 알아본다.


np.array()

np.array()는 python list를 이용하여 ndarray를 만들 수 있다. 물론 ndarray를 다시 np.array()를 통해 ndarray로 만들 수 있지만, 처음 ndarray를 만드는 입장에서 python list를 사용해보도록 하자

class numpy.ndarray(shape, dtype=float, buffer=None, offset=0, strides=None, order=None)

In [3]:
import numpy as np
In [5]:
python_list = [1, 2, 3, 4, 5]
ndarr = np.array(python_list)

print("python_list:", python_list)
print("ndarr:", ndarr, '\n')
print(type(python_list), type(ndarr))
python_list: [1, 2, 3, 4, 5]
ndarr: [1 2 3 4 5] 

<class 'list'> <class 'numpy.ndarray'>

위에서 확인할 수 있듯이, python list를 np.array()의 argument로 넣어 ndarray를 만들어낼 수 있다. 물론 2차원, 3차원, ..., n차원의 ndarray도 만들어낼 수 있다. 다음은 2차원 ndarray의 예시이다.

In [6]:
python_list = [[1,2],[3,4]]
ndarr = np.array(python_list)

print("python_list:", python_list)
print("ndarr:", ndarr, '\n')
python_list: [[1, 2], [3, 4]]
ndarr: [[1 2]
 [3 4]] 


np.zeros()

zeros라는 단어에서 볼 수 있듯이, 0으로 채워진 ndarray를 만들어낸다. np.array에서는 ndarray에 들어갈 값을 정해줬지만, np.zeros()에서는 이미 들어갈 값이 0으로 정해졌으므로 어떤 모양의 ndarray를 만들어줄지 결정해주면 된다.

numpy.zeros(shape, dtype=float, order='C')

다음은 1차원 np.zeros()를 만든 예시이다. shape을 통해 ndarray의 모양을 결정해주는데, 이 shape은 2X3 ndarray라면 (2,3)처럼 넣어줘야하기 때문에 tuple 또는 list형태로 넣어준다. 하지만 많은 경우에 tuple 형태로 넣어준다.

In [10]:
zeros_np = np.zeros(shape = (10))
print(zeros_np)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

위와 같이 1차원 ndarray를 모두 0으로 채워서 만들 수 있다. 이는 python list를 모두 0으로 채워넣어서 zero vector를 만들어내는 경우보다 훨씬 수월해서 많이 사용된다.

다음은 2차원 zero matrix를 만들어내는 예시이다.

In [11]:
zeros_np = np.zeros(shape = (2,3))
print(zeros_np)
[[0. 0. 0.]
 [0. 0. 0.]]

np.ones()

np.zeros()가 ndarray를 모두 0으로 채우는 함수였다면, np.ones는 모두 1로 채워진 ndarray를 만드는 함수이다.

numpy.ones(shape, dtype=None, order='C')[source]

In [12]:
ones_np = np.ones(shape = (11,))
print(ones_np)
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
In [14]:
ones_np = np.ones(shape = (3,4))
print(ones_np)
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]
 [1. 1. 1. 1.]]

np.full()

ndarray를 초기화할 때 0이나 1외의 값으로 초기화를 하고 싶을 때 사용하는 함수이다. 따라서 shape 뿐만 아니라 어떤 값을 채워줄지 fill_value에 넣어준다.

numpy.full(shape, fill_value, dtype=None, order='C')

In [16]:
full_np = np.full(shape = (6,), fill_value = 3)
print(full_np)
[3 3 3 3 3 3]
In [17]:
import math
PI = math.pi

full_np = np.full(shape = (3,4), fill_value = PI)
print(full_np)
[[3.14159265 3.14159265 3.14159265 3.14159265]
 [3.14159265 3.14159265 3.14159265 3.14159265]
 [3.14159265 3.14159265 3.14159265 3.14159265]]

np.empty()

마지막으로 어떤 특정한 값으로 초기화하는 것이 아니라 값들은 나중에 채우고 ndarray의 형태만 잡아놓고 싶을 때가 있다. 이때는 ndarray의 memory만 잡아주는 np.empty()를 사용한다.

numpy.empty(shape, dtype=float, order='C')

In [21]:
empty_np = np.empty(shape = (4,))
print(empty_np)
[6.93611945e-310 6.93611945e-310 0.00000000e+000 0.00000000e+000]

위의 예시에서 볼 수 있듯이 우리가 지정되지 않은 값들이 들어있는 것을 알 수 있는데, 이 np.empty()는 전에 memory에 들어있던 값들을 유지한테 형태만 잡아주기 때문에 초기에는 쓰레기 값들이 채워져있는 것을 알 수 있다.

In [23]:
empty_np = np.empty(shape = (3,4))
print(empty_np)
[[3.14159265 3.14159265 3.14159265 3.14159265]
 [3.14159265 3.14159265 3.14159265 3.14159265]
 [3.14159265 3.14159265 3.14159265 3.14159265]]

+ Recent posts