1.넘피
- 수학 및 과학 컴퓨팅 패키지
- 성능: ndarray는 Python의 목록보다 빠릅니다.
- 메모리 크기: ndarray는 파이썬 목록보다 적은 메모리를 사용합니다.
!pip install numpy
색인에서 검색: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ 요구 사항이 이미 충족됨: /usr/local/lib/python3.8/dist-packages(1.21.6)의 numpy
import numpy as np
np
1-1 열
- 값 그룹
list1 = (1, 2, 3, 4)
list2 = ((1, 2, 3, 4), (5, 6, 7, 8))
print(list1)
print(type(list1))
print(list2)
print(type(list1))
(1, 2, 3, 4)
((1, 2, 3, 4), (5, 6, 7, 8))
arr = np.array((1, 2, 3, 4))
print(arr)
print(type(arr)) # < class 'numpy.ndarray'> = n dimension array
(1 2 3 4)
# 리스트를 ndarray로 생성하는 방법
arr1 = np.array(list1)
arr2 = np.array(list2)
print(arr1)
print(type(arr1))
print(arr2)
print(type(arr2))
(1 2 3 4)
((1 2 3 4)
(5 6 7 8))
1-2 배열 데이터 유형
- 목록과 달리 ndarray는 단일 데이터 유형만 허용합니다.
list1 = (1, 3.14, 'Python', '🐇', True)
list1
(1, 3.14, ‘파이썬’, ”, 참)
list1(3)
arr1 = np.array((1, 2, 3, 4))
arr1
배열((1, 2, 3, 4))
arr2 = np.array((1, 2, 3.14, 4))
arr2
arr3 = np.array((1, 2, 3.14, True))
arr3
배열((1. , 2. , 3.14, 1. ))
arr4 = np.array((1, 2, 3.14, True, 'apple'))
arr4
array((‘1’, ‘2’, ‘3.14’, ‘참’, ‘사과’), dtype=”
arr3 = np.array((1, 2, 3.14, True), dtype=int)
arr3
배열((1, 2, 3, 1))
arr4 = np.array((1, 2, 3.14, True, '1234'), dtype=int)
arr4
————————————————– —————————————
NameError 역추적(마지막 호출 마지막)
—-> 1 arr4 = np.array((1, 2, 3.14, Ture, ‘1234’), dtype=int)
2 도착4
NameError: 이름 ‘Ture’가 정의되지 않았습니다.
arr4 = np.array((1, 2, 3.14, True, '1234'), dtype=int)
arr4
배열 (( 1, 2, 3, 1, 1234))
1-3 인덱싱 및 슬라이싱
- 어레이의 일부 선택
arr1 = np.array(('😁','🤣','😃','🍅','🍔'))
arr1.shape
(5,)
print(arr1(0))
print(arr1(4))
print(arr1(-1))
print(arr1(-2))
print(arr1(0:3))
print(arr1(2:))
print(arr1(:3))
(” ” ”)
(” ” ”)
(” ” ”)
arr2d = np.array(((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)))
arr2d.shape
(3, 4)
arr2d(0, 2)
삼
arr2d(2, 1)
10
# 0행을 가져오기
print(arr2d(0))
print(arr2d(0,))
print(arr2d(0,:))
(1 2 3 4)
(1 2 3 4)
(1 2 3 4)
# 0열을 가져오기
print(arr2d(:, 0))
(159)
arr2d(:2, :)
배열(((1, 2, 3, 4),
(5, 6, 7, 8)))
arr2d(:2, 2:)
배열(((3, 4),
(7, 8)))
1-4 멋진 인덱싱
- 범위가 아닌 특정 인덱스의 지정된 값을 선택하여 추출하고자 할 때 사용
arr1 = np.array((10, 23, 2, 6, 90, 85, 32, 66, 80))
idx = (1, 4, 6)
arr1(idx)
배열((23, 90, 32))
arr2d = np.array(((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)))
arr2d((0, 1), :)
배열(((1, 2, 3, 4),
(5, 6, 7, 8)))
1-5 부울 인덱싱
- 조건부 필터링에 의한 부울 값 인덱스
arr1 = np.array(('😁','🤣','😃','🍅','🍔'))
selValue = (True, True, False, False, True)
arr1(selValue)
배열((”, ”, ”), dtype=”
selValue = (True, True, True, True)
arr1(selValue) # IndexError: boolean index did not match indexed array along dimension 0; dimension is 5 but corresponding boolean dimension is 4
arr2d = np.array(((1, 2, 3, 4), (5, 6, 7, 8), (9, 10, 11, 12)))
arr2d > 7
배열(((거짓, 거짓, 거짓, 거짓),
(거짓, 거짓, 거짓, 참),
(참, 참, 참, 참))))
arr2d < 5
배열((( 참, 참, 참, 참),
(틀렸어, 틀렸어, 틀렸어, 틀렸어),
(틀렸어, 틀렸어, 틀렸어, 틀렸어))))
arr2d(arr2d > 7)
배열 (( 8, 9, 10, 11, 12))
arr2d(arr2d < 5)
배열((1, 2, 3, 4))
2. 행렬 연산
2-1 운영자
# 덧셈 연산
a = np.array(((1, 2, 3), (2, 3, 4)))
b = np.array(((1, 2, 3), (2, 3, 4)))
print(a.shape)
print(b.shape)
(2, 3)
(2, 3)
# shape가 같아야 함
# 같은 position끼리 연산
a + b
a = np.array(((1, 2, 3), (2, 3, 4)))
b = np.array(((3, 4), (1, 2)))
print(a. shape)
print(b. shape)
(2, 3)
(2, 2)
a + b # ValueError: operands could not be broadcast together with shapes (2,3) (2,2)
# 뺄셈 연산
a = np.array(((1, 2, 3), (2, 3, 4)))
b = np.array(((1, 2, 3), (2, 3, 4)))
a - b
배열(((0, 0, 0),
(0, 0, 0)))
# 나눗셈 연산
a = np.array(((1, 2, 3), (2, 3, 4)))
b = np.array(((4, 5, 6), (1, 2, 3)))
a / b
배열(((0.25, 0.4, 0.5),
(2. , 1.5 , 1.33333333)))
# 내적(dot product)
# 맞닿는 shape가 같아야 함
# 결과 행렬은 떨어져있는 shape의 형태와 같아야 함
a = np.array(((1, 2, 3), (1, 2, 3), (2, 3, 4)))
b = np.array(((1, 2), (3, 4), (5, 6)))
# 맞닿는 shape가 같아야함 ex ) (3,3) (3,2) = (3,2) 내부 맞닿는 3이 같아야함
'''
1 2 3 1 2
1 2 3 3 4
2 3 4 5 6
'''
a.shape, b.shape
((3, 3), (3, 2))
print((1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6))
print((1*1 + 2*3 + 3*5), (1*2 + 2*4 + 3*6))
print((2*1 + 3*3 + 4*5), (2*2 + 3*4 + 4*6))
22 28
22 28
31 40
np.dot(a, b)
배열(((22, 28),
(22, 28),
(31, 40)))
2-2 마련하다
- 순차 값을 생성하는 데 사용
arr1 = range(1, 11)
arr1
지역(1, 11)
for i in arr1:
print(i, end=' ')
1 2 3 4 5 6 7 8 9 10
arr2 = np.arange(1, 11)
arr2
배열((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
for i in arr2:
print(i, end=' ')
1 2 3 4 5 6 7 8 9 10
2-3 정렬 기준
arr1 = np.array((1, 10, 5, 7, 2, 4, 3, 6, 8, 9))
arr1
배열((1, 10, 5, 7, 2, 4, 3, 6, 8, 9))
np.sort(arr1) # 기본값은 오름차순
배열((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
np.sort(arr1)(::-1) # 내림차순
배열((10, 9, 8, 7, 6, 5, 4, 3, 2, 1))
li1 = (1, 10, 5, 7, 2, 4, 3, 6, 8, 9)
li1.sort()
li1 # 정렬된 결과를 유지
(1 2 3 4 5 6 7 8 9 10)
result = np.sort(arr1)
result
배열((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
arr2d = np.array(((11, 10, 12, 9),
(3, 1, 4, 2),
(5, 6, 7, 8)))
arr2d.shape
(3, 4)
#행 정렬
np. sort(arr2d, axis=0) # axis = 0: 행
배열((( 3, 1, 4, 2),
(5, 6, 7, 8),
(11, 10, 12, 9)))
#열 정렬
np.sort(arr2d, axis=1) # axis = 0: 열
배열((( 9, 10, 11, 12),
(1, 2, 3, 4),
(5, 6, 7, 8)))
# 축의 마지막 방향
np.sort(arr2d, axis=-1) # axis = -1: 축이 많을 경우 마지막 축의 값을 설정
배열((( 9, 10, 11, 12),
(1, 2, 3, 4),
(5, 6, 7, 8)))
2-4 숫자의 단일 연산
a = np.array(((1, 2, 3), (4, 5, 6)))
b = np.array(((3, 3, 3), (3, 3, 3)))
a + b
배열(((4, 5, 6),
(7, 8, 9)))
a + 3
배열(((4, 5, 6),
(7, 8, 9)))
a - 3
배열(((-2, -1, 0),
(1, 2, 3)))
a * 3
배열((( 3, 6, 9),
(12, 15, 18)))
a / 3
배열(((0.33333333, 0.66666667, 1. ),
(1.33333333, 1.66666667, 2. )))
