본문 바로가기
Python/NumPy

배열(array)의 출력과 기본연산자(basic operation) - NumPy(13)

by 콩돌 2019. 3. 3.
반응형

참고 자료

https://docs.scipy.org/doc/numpy/user/quickstart.html



파이썬 버전 3.7 기준

NumPy 버전 1.16 기준


본 포스팅에서 다루는 범위는 다음과 같다.

print 함수를 이용한 배열의 출력과 넘파이의 기본연산자(+, -, *, /), 행렬내적(@, dot), 단항연산자(sum, min, max, cumsum)를 다룬다.



배열(array)의 출력과 기본 연산자(basic operation)


배열의 출력

  ○ 배열을 출력할때에는 파이썬 리스트를 출력하는 것과 거의 유사하지만, 아래와 같은 법칙을 따른다.

    ▷ 마지막 축은 왼쪽에서 오른쪽으로 출력이 된다. 

    ▷ 두번째부터 마지막까지는 가장 위에서 가장 아래까지 출력된다.

    ▷ 나머지는 위에서 아래로 출력되며, 각 슬라이스는 다음부터 빈줄로 구분된다.

  ○ 즉, 차원에 따라서 출력되는 모양은 아래와 같다.

    ▷ 1차원 배열은 열처럼 출력이 된다.

    ▷ 2차원(양차원)은 행렬(matrices)처럼 출력이된다.

    ▷ 3차원은 행렬의 배열처럼 출력이된다.


출력 예)

# 1차원 배열의 출력

In[4]: x = np.arange(10)

In[5]: print(x)

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


# 2차원 배열의 출력

In[6]: y = np.arange(10).reshape(2,5)

In[7]: print(y)

[[0 1 2 3 4]

 [5 6 7 8 9]]


# 3차원 배열의 출력

In[8]: z = np.arange(20).reshape(2,2,5)

In[9]: print(z)

[[[ 0  1  2  3  4]

  [ 5  6  7  8  9]]


 [[10 11 12 13 14]

  [15 16 17 18 19]]]


  ○ 넘파이에서는 굉장히 큰 배열을 출력할 경우 자동으로 중간부분을 자동으로 스킵하여 출력한다.

    ▷ 즉, 처음부분과 끝부분만 출력해준다.


출력 예)

# 1차원 배열 출력의 생략 

In[13]: x1 = np.arange(2500)

In[14]: print(x1)

[   0    1    2 ... 2497 2498 2499]


# 2차원 배열 출력의 생략

In[15]: x2 = np.arange(2500).reshape(50,50)

In[16]: print(x2)

[[   0    1    2 ...   47   48   49]

 [  50   51   52 ...   97   98   99]

 [ 100  101  102 ...  147  148  149]

 ...

 [2350 2351 2352 ... 2397 2398 2399]

 [2400 2401 2402 ... 2447 2448 2449]

 [2450 2451 2452 ... 2497 2498 2499]]



넘파이의 기본 연산자 및 메서드


기본 연산

  ○ 배열에 대해 산술연산을 수행할 때에는 같은 인덱스를 가지는 요소들끼리 산술연산이 적용된다.

    ▷ 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 제곱(**)와 같은 모든 기본연산자를 포함한다. 

    ▷ 행렬의 내적과 관련된 내용은 아래에서 다룬다.

  ○ 파이썬에서 제공되는 "+=", "*=", "-=" 연산자도 마찬가지로 적용이 된다.

    ▷ 단, 자료형이 다를 경우 예외를 일으킬 수 있으므로 주의를 요한다.

  ○ 비교연산(<, >, ==)역시 가능하다.

  ○ 하위연산자와 상위연산자간에 연산을 수행할때 상위연산자의 자료형에 따른다.


출력 예)

# 예제 변수 입력

In[3]: x = np.array([10,20,30,40,50])

In[4]: y = np.array(np.arange(5)*5)

In[5]: y

Out[5]: array([ 0,  5, 10, 15, 20])


# 각 연산자의 결과

In[6]: x+y

Out[6]: array([10, 25, 40, 55, 70])

In[7]: x-y

Out[7]: array([10, 15, 20, 25, 30])

In[8]: y**2

Out[8]: array([  0,  25, 100, 225, 400], dtype=int32)

In[9]: x*10

Out[9]: array([100, 200, 300, 400, 500])

In[10]: x > 23

Out[10]: array([False, False,  True,  True,  True])


In[11]: x += y
In[12]: x
Out[12]: array([10, 25, 40, 55, 70])
In[13]: x -= y
In[14]: x
Out[14]: array([10, 20, 30, 40, 50])
In[15]: x *= y 
In[16]: x
Out[16]: array([   0,  100,  300,  600, 1000])

# 서로 다른 자료형간의 연산
In[18]: x = np.array([10,20,30,40,50])
In[19]: y = np.array(np.arange(5)*5.)
In[20]: y
Out[20]: array([ 0.,  5., 10., 15., 20.])

In[21]: x+y
Out[21]: array([10., 25., 40., 55., 70.])


곱(*, @) 연산과 행렬 내적

  ○ 많은 행렬연산 언어와는 다르게, 곱셈(*) 연산자는 요소들끼리 산술연산이 적용된다. 

  ○ 행렬의 내적(dot product)를 계산하는 연산자는 @ 연산자를 사용하거나, dot 함수나 메서드를 적용하면 된다.

    ※ @ 연산자는 파이썬 3.5 버전 이상부터 지원된다.


출력 예)

# 예제 변수 입력 

In[22]: x = np.array([[1,2],[3,4]])

In[23]: y = np.array([[2,0],[2,2]])


# 각 연산 결과

In[24]: x*y

Out[24]: 

array([[2, 0],

       [6, 8]])

In[25]: x@y

Out[25]: 

array([[ 6,  4],

       [14,  8]])

In[26]: x.dot(y)

Out[26]: 

array([[ 6,  4],

       [14,  8]])


단항연산자(sum, min, max, cumsum)

  ○ sum과 같은 단항 연산자는 ndarray 클래스의 메서드로 사용되어 진다.

  ○ 기본적으로, 단항연산자는 형상과 상관없이 내부 배열을 하나의 리스트처럼 간주하며, 결과는 하나의 숫자로 반환이 된다. 

    ▷ axis를 명시함으로서 각 축으로 나누어 연산하여, 결과를 명시하는 것도 가능하다.


출력 예)

# 예제 변수 입력

In[31]: x = np.arange(15).reshape(3,5)

In[32]: x

Out[32]: 

array([[ 0,  1,  2,  3,  4],

       [ 5,  6,  7,  8,  9],

       [10, 11, 12, 13, 14]])


# 단항연산자 적용 결과

In[33]: x.sum()

Out[33]: 105

In[34]: x.min()

Out[34]: 0

In[35]: x.max()

Out[35]: 14

In[36]: x.cumsum()

Out[36]: 

array([  0,   1,   3,   6,  10,  15,  21,  28,  36,  45,  55,  66,  78,

        91, 105], dtype=int32)


# axis 변수 입력시 반환 결과

In[37]: x.sum(axis=0)

Out[37]: array([15, 18, 21, 24, 27])

In[38]: x.sum(axis=1)

Out[38]: array([10, 35, 60])

In[39]: x.cumsum(axis=0)

Out[39]: 

array([[ 0,  1,  2,  3,  4],

       [ 5,  7,  9, 11, 13],

       [15, 18, 21, 24, 27]], dtype=int32)

In[40]: x.cumsum(axis=1)

Out[40]: 

array([[ 0,  1,  3,  6, 10],

       [ 5, 11, 18, 26, 35],

       [10, 21, 33, 46, 60]], dtype=int32)



반응형

댓글