티스토리 뷰

Python의 list를 가지고 ndarray 생성

import numpy as np

## Python의 list부터 살펴보자
# literal : 자료구조를 코드 상에서 표현하는 방법
a = [1, 2, 3, 4, 5]    # python의 list
print(a)               # [1, 2, 3, 4, 5] => list의 literal
print(type(a))         # <class 'list'>


## Numpy의 ndarry 만들기 - Python의 list를 가지고
arr = np.array([1, 2, 3, 4, 5])
print(arr)             # [1 2 3 4 5] => ndarray의 literal
print(type(arr))       # <class 'numpy.ndarray'>
print(arr.dtype)       # int32 (int: 정수, 32: 32bit) - ndarray는 같은 data type만 사용
print(arr[0])          # 1
print(type(arr[0]))    # <class 'numpy.int32'> => python의 <class 'int'>가 아니다!


arr1 = np.array([100, 3.14, True, 'Hello!'])
print(arr1)            # ['100' '3.14' 'True' 'Hello!'] - 같은 자료형으로 자동 변환

다차원 ndarray 만들기

## 다차원 ndarray 만들기
# python의 list는 중첩리스트만 존재한다.

a = [[1, 2, 3],
     [4, 5, 6]]
arr = np.array(a)
print(arr)          # [[1 2 3]
                    #  [4 5 6]]
print(arr[1, 1])    # 5
a = [[1, 2, 3],
     [4, 5, 6]]

arr = np.array(a, dtype=np.float64)
print(arr)       # [[1. 2. 3.]
                 # [4. 5. 6.]]

ndarray의 차원 관련 속성

ndim, shape

# ndarray의 차원 관련 속성

a = [1, 2, 3, 4]
arr = np.array(a, dtype=np.float64)
print(arr)          # [1. 2. 3. 4.]

print(arr.ndim)     # ndim => 치원의 개수 : 1
print(arr.shape)    # 차원의 개수와 각 차원의 요소를 tuple로 표현 - 1차원의 요소 4개
                    # (4,)

a = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9],
     [10, 11, 12]]

arr = np.array(a, dtype=np.float64)
print(arr)
# [[ 1.  2.  3.]
#  [ 4.  5.  6.]
#  [ 7.  8.  9.]
#  [10. 11. 12.]]
print(arr.shape)    # (4, 3) : 4행 3열

## 3차원 중첩 리스트
## ndarray를 생성한 후 shape를 출력하면 (2, 2, 3)이 나오도록 list 작성
a = [[[1, 2, 3], [4, 5, 6]] , [[7, 8, 9], [10, 11, 12]]]
arr = np.array(a, dtype=np.float64)
print(arr)          # [[[ 1.  2.  3.]
                    #   [ 4.  5.  6.]]

                    #  [[ 7.  8.  9.]
                    #   [10. 11. 12.]]]
print(arr.shape)    # (2, 2, 3)

numpy array (ndarray) 의 크기

size

# numpy array (ndarray) 의 크기를 알아보자

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]    # 4 x 3

arr = np.array(a, dtype=np.float64)

print(arr)              # [[ 1.  2.  3.]
                        #  [ 4.  5.  6.]
                        #  [ 7.  8.  9.]
                        #  [10. 11. 12.]]
print(arr.size)         # 12
print(len(arr))         # 4 : 첫번째 차원의 요소 갯수를 리턴

print(arr.shape)        # (4, 3)
arr.shape = (2, 6)      # shape 재조정 가능
print(arr)              # [[ 1.  2.  3.  4.  5.  6.]
                        #  [ 7.  8.  9. 10. 11. 12.]]
arr.shape = (3, 2, 2)   # 면, 행, 열
print(arr)              # [[[ 1.  2.]
                        #   [ 3.  4.]]

                        #  [[ 5.  6.]
                        #   [ 7.  8.]]

                        #  [[ 9. 10.]
                        #   [11. 12.]]]

# 이렇게 shape 속성을 이영해서 변경되는 방식은 잘 사용하지 않는다.
# reshape() 함수를 이용하여 shape를 변경하는 경우가 더 많다.

ndarray의 데이터 타입 변경

astype

# ndarray를 생성할 때 dtype을 지정해서 만든다.
# ndarry의 데이터 타입을 변경하려면 어떻게 해야 할까?

import numpy as np
arr = np.array([1.5, 2.3, 8.3, 9.8, 7.7], dtype=np.float64)
print(arr)                      # [1.5 2.3 8.3 9.8 7.7]

result = arr.astype(np.int32)   # 실수 -> 정수 형변환시 소수점은 버린다.
print(result)                   # [1 2 8 9 7]
print(result.dtype)             # int32

ndarray를 생성하는 여러가지 방법

  • zeros(), ones(), full(), empty()
  • zeros_like(), ones_like(), full_like()
  • arange()
  • linspace()

1. zeros(), ones(), full(), empty()

import numpy as np

## ndarray를 만드는 다른 방법 => zeros, ones, full, empty

arr = np.zeros((3, 4))      # 0으로 채운 numpy array를 만든다.
                            # shape을 명시해야 한다.
                            # type은 np.float64로 지정.
print(arr)                  # [[0. 0. 0. 0.]
                            #  [0. 0. 0. 0.]
                            #  [0. 0. 0. 0.]]

arr = np.ones((2, 5))       # 1로 채운 numpy array를 만든다.
print(arr)                  # [[1. 1. 1. 1. 1.]
                            #  [1. 1. 1. 1. 1.]]

arr = np.full((3, 5), 7, dtype=np.float64)
print(arr)                  # [[7. 7. 7. 7. 7.]
                            #  [7. 7. 7. 7. 7.]
                            #  [7. 7. 7. 7. 7.]]

arr = np.empty((3, 3))      # 3 x 3 ndrray를 생성하는데, 초기값을 주지 않는다.
                            # 원하는 shape의 공간만 설정한다.
print(arr)

2. zeros_like(), ones_like(), full_like()

## ndarray를 만드는 다른 방법 => zeros_like(), ones_like(), full_like()

arr = np.array([(1, 2, 3), (4, 5, 6)])           # 2 x 3 ndrray 생상
print(arr)                                       # [[1 2 3]
                                                 #  [4 5 6]]

# ones, zeros, full, empty 함수들과 상당히 유사한 함수를 이용
result = np.zeros_like(arr, dtype=np.float64)   # arr과 똑같은 shaped의 ndrray 생성
print(result)                                   # [[0. 0. 0.]
                                                #  [0. 0. 0.]]

result = np.ones_like(arr, dtype=np.float64)
print(result)                                   # [[1. 1. 1.]
                                                #  [1. 1. 1.]]

result = np.full_like(arr, 5, dtype=np.float64)
print(result)                                   # [[5. 5. 5.]
                                                #  [5. 5. 5.]]

3. arange()

## ndarray를 만드는 다른 방법 => arange()

# python의 range와 유사하다.
# 주어진 범위 내에서 지정한 간격으로 연속적인 원소를 가진 ndarray를 생성
a = range(1, 10, 1)
print(a)                      # range(1, 10)

arr = np.arange(1, 10, 1)     # 1 <= x < 10, 1씩 증가
print(arr)                    # [1 2 3 4 5 6 7 8 9]

4. linspace()

np.linspace(start, stop, num)

  • start <= x <= stop, num개의 숫자를 균일한 간격으로 생성해서 ndarray 생성
## ndarray를 만드는 다른 방법 => linspace()

# linspace 기능을 확인하기 위해 그래프로 데이터를 그린다!
#  => matplotlib module, searborn 등등..

import numpy as np
import matplotlib.pyplot as plt

# np.linspace(start, stop, num)
# start <= x <= stop, num개의 숫자를 균일한 간격으로 생성해서 ndarray 생성

arr = np.linspace(0, 10, 11)
print(arr)        # [ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]

print("--------------------------------------------------------------------\n")
arr = np.linspace(0, 10, 13)
print(arr)       # [ 0.    0.83333333  1.66666667  2.5    3.33333333  4.16666667
                 #   5.   5.83333333  6.66666667  7.5     8.33333333  9.16666667
                 #  10.]

print("--------------------------------------------------------------------\n")
arr = np.linspace(1, 121, 31)
# 원소간의 간격은 (stop-start) / (num-1)
# 120 / 30 = 4
# [1 5 9 ..]
print(arr)
# [  1.   5.   9.  13.  17.  21.  25.  29.  33.  37.  41.  45.  49.  53.
#   57.  61.  65.  69.  73.  77.  81.  85.  89.  93.  97. 101. 105. 109.
#  113. 117. 121.]

print("--------------------------------------------------------------------\n")
plt.plot(arr, "*")
plt.show()

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함