티스토리 뷰
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()
'멀티캠퍼스 AI과정 > 03 Numpy' 카테고리의 다른 글
Numpy 06 - ndarray의 사칙연산, 행렬곱, Broadcasting (0) | 2020.09.08 |
---|---|
Numpy 05 - ndarray의 Indexing & Slicing (0) | 2020.09.08 |
Numpy 04 - ndarray의 shape 조절 함수 (0) | 2020.09.08 |
Numpy 03 - 랜덤으로 ndarray 생성 (0) | 2020.09.08 |
Numpy 01 - Introduction (0) | 2020.09.08 |
댓글