728x90
반응형
SMALL
1. 행렬 연산자
- 덧셈, 뺄셈, 곱셈, 나눗셈은 shape가 같아야 함(행렬의 크기가 같아야함)
- 같은 position끼리 연산됨 - 인덱스 번호가 같은 데이터 끼리 연산이 됨
- 내적 연산(dot product)
- 맞닿는 shape가 같아야 함
- 내적은 떨어져 있는 shape가 결과 행렬이 됨
a = np.array([[1,2,3],
[2,3,4]
])
b = np.array([[3,4,5],
[1,2,3]
])
print(a.shape)
print(b.shape)
>>> (2, 3)
(2, 3)
# 덧셈 연산
a + b
>>> array([[4, 6, 8],
[3, 5, 7]])
# 뺄셈 연산
a - b
>>> array([[-2, -2, -2],
[ 1, 1, 1]])
# 곱셈 연산
a * b
>>> array([[ 3, 8, 15],
[ 2, 6, 12]])
# 나눗셈 연산
a / b
>>> array([[0.33333333, 0.5 , 0.6 ],
[2. , 1.5 , 1.33333333]])
# 행렬곱(내적), dot product
a = np.array([[1,2,3],
[1,2,3],
[2,3,4]])
b = np.array([[1,2],
[3,4],
[5,6]])
print(a.shape, b.shape)
>>> (3, 3) (3, 2)
# 내적곱
np.dot(a, b)
>>> array([[22, 28],
[22, 28],
[31, 40]])
✅ 연산하고자 하는 두 행렬의 shape이 같지 않을 때 ➡ 에러!
c = np.array([[1,2,3],
[2,3,4]
])
d = np.array([[3,4],
[1,2]
])
print(c.shape)
print(d.shape)
>>> (2, 3)
(2, 2)
# 덧셈 연산
c + d
>>> ValueError: operands could not be broadcast together with shapes (2,3) (2,2)
2. arange
- 순차적인 값을 생성할 때 사용
- python에서 range와 비슷
arr1 = range(1,11)
arr1
>>> range(1, 11) # 1부터 10이 되기 전까지
for i in arr1:
print(i, end=' ') # 출력되는 값을 옆으로 이어붙이기 위해
>>> 1 2 3 4 5 6 7 8 9 10
arr2 = np.arange(1, 11) # ndarray로 저장되는 특징
arr2
>>> array([ 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 # arange로 생성된 ndarray도 iterable한 객체임
3. sort
✅ ndarray 정렬하기
ndarr1 = np.array([1,10, 5,6,8,2,3,6,7,9])
ndarr1
>>> array([ 1, 10, 5, 6, 8, 2, 3, 6, 7, 9])
# 오름차순 정렬하기
np.sort(ndarr1) # 기본값은 오름차순
>>> array([ 1, 2, 3, 5, 6, 6, 7, 8, 9, 10])
ndarr1
>>> array([ 1, 10, 5, 6, 8, 2, 3, 6, 7, 9]) # inplace연산x
# reverse 속성이 없음(내림차순을 하지 못함!)
np.sort(ndarr1, reverse=True)
>>> TypeError: _sort_dispatcher() got an unexpected keyword argument 'reverse'
# 역방향으로 sort
np.sort(ndarr1)[::-1]
>>> array([10, 9, 8, 7, 6, 6, 5, 3, 2, 1])
✅ 문자열 정렬하기
str1 = 'Python'
print(str1[:]) # 모든 문자를 슬라이싱
print(str1[::]) # print(str1[::1]) 과 같음 -> 1: 정방향, -1: 역방향
print(str1[::-1])
print(str1[4:1:-1]) # 4번 인덱스부터 인덱스 1번 직전까지 역순으로 print
print(str1[4::-1]) # 4번 인덱스부터 인덱스 0번까지 역순으로 print
>>> Python
Python
nohtyP
oht
ohtyP
✅ 다차원의 ndarray 정렬하기
ndarr2d = np.array([[11,10,12,9],
[3,1,4,2],
[5,6,7,8]])
ndarr2d.shape # 3행 4열
>>> (3, 4)
# 행정렬(axis=0), 행 요소에 대한 정렬!!!!
np.sort(ndarr2d, axis=0)
>>> array([[ 3, 1, 4, 2],
[ 5, 6, 7, 8],
[11, 10, 12, 9]])
# 열정렬(axis=1), 한 행 내부에서 각각 열 요소에 대한 정렬(오름차순)
np.sort(ndarr2d, axis=1)
>>> array([[ 9, 10, 11, 12],
[ 1, 2, 3, 4],
[ 5, 6, 7, 8]])
# 열 정렬 내림차순
np.sort(ndarr2d, axis=1)[:,::-1] # 모든 행, 열방향으로 내림차순
>>> array([[12, 11, 10, 9],
[ 4, 3, 2, 1],
[ 8, 7, 6, 5]])
# 축의 마지막 방향
np.sort(ndarr2d, axis=-1) # 현재는 열정렬과 동일함 -> 2차원은 (행, 열), 3차원은 (면, 행, 열) ...
>>> array([[ 9, 10, 11, 12],
[ 1, 2, 3, 4],
[ 5, 6, 7, 8]])
4. 숫자의 단일 연산
- ndarray와 단일 숫자와의 연산
- 각 position의 단일 수를 연산함
a = np.array([[1,2,3],
[4,5,6]])
# 덧셈 연산
a + 3
>>> array([[4, 5, 6],
[7, 8, 9]])
# 뺄셈 연산
a - 3
>>> array([[-2, -1, 0],
[ 1, 2, 3]])
# 곱셈 연산
a * 3
>>> array([[ 3, 6, 9],
[12, 15, 18]])
# 나눗셈 연산
a / 3
>>> array([[0.33333333, 0.66666667, 1. ],
[1.33333333, 1.66666667, 2. ]])
b = np.array([[3,3,3],
[3,3,3]])
# 덧셈 연산
a + b
>>> array([[4, 5, 6],
[7, 8, 9]])
# 뺄셈 연산
a - b
>>> array([[-2, -1, 0],
[ 1, 2, 3]])
# 곱셈 연산
a * b
>>> array([[ 3, 6, 9],
[12, 15, 18]])
# 나눗셈 연산
a / b
>>> array([[0.33333333, 0.66666667, 1. ],
[1.33333333, 1.66666667, 2. ]])
728x90
반응형
LIST