zeros
zeros = np.zeros([3,3])
zeros
>>
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
0으로 만들기
ones
zeros = np.ones([10,5])
zeros
>>
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
1로 만들기
reshape
arr = np.arange(12).reshape(3,4)
arr
>>
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
arr1 = arr.reshape(-1)
arr1
>>
[ 0 1 2 3 4 5 6 7 8 9 10 11]
arr2 = arr.reshape(-1,2) # 2로 나누고 나머지로 차원 나누어라
arr2
>>
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])
arr3 = arr.reshape(-1, 3, 2) # 2개짜리로 나누고 3차원으로 나눈 후 나머지로 차원 나눠라
arr3
>>
array([[[ 0, 1],
[ 2, 3],
[ 4, 5]],
[[ 6, 7],
[ 8, 9],
[10, 11]]])
Ravel
arr.shape
>> (3,4)
arr = arr.ravel()
arr.shape
>> (12,)
차원을 평평하게, 즉 1차원으로 바꾸어 준다.
np.expand_dims()
안의 값은 유지하되 차원 수를 늘리고 싶을 때가 있음
이럴 때 사용하는 것이 expand_dims
arr1 = np.expand_dims(arr, 0) # 앞에다가 차원 늘려준다
arr1.shape
>>
(1,12)
arr2 = np.expand_dims(arr, -1) # 뒤에다가 차원 늘려준다.
arr2.shape
>>
(12,1)
index
arr = np.arange(9).reshape(3,3)
arr[1,2]
>> 5
slicing
print(arr[1:])
print(arr[1:,1:])
>>
[[3 4 5]
[6 7 8]]
[[4 5]
[7 8]]
Boolean indexing
data = np.random.randn(3, 3)
data
>>
array([[-0.86883424, 0.2072883 , 0.73811635],
[ 0.46172519, -1.57595357, 0.53245106],
[-0.28444254, -1.03684887, 1.26579295]])
data <= 0
>>
array([[ True, False, False],
[False, True, False],
[ True, True, False]])
data[data <= 0]
>>
array([-0.86883424, -1.57595357, -0.28444254, -1.03684887])
data[data <= 0] = 1
data
>>
array([[1. , 0.2072883 , 0.73811635],
[0.46172519, 1. , 0.53245106],
[1. , 1. , 1.26579295]])
Broadcast
tensorflow나 pytorch로 계산하면 broadcast의 개념도 잘 이해해야 함
broadcast는 연산 하려는 서로 다른 두개의 행렬의 shape가 같지 않고,
한쪽의 차원이라도 같거나 또는 값의 갯수가 한 개 일 때
이를 여러 복사를 하여 연산을 함
arr = np.arange(9).reshape(3,3)
arr
>>
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
arr * 3
>>
array([[ 0, 3, 6],
[ 9, 12, 15],
[18, 21, 24]])
arr + np.array([1,2,3])
>>
array([[ 1, 3, 5],
[ 4, 6, 8],
[ 7, 9, 11]])
arr1 = np.random.randint(2, size=27).reshape(3,3,3)
arr2 = np.random.randint(2, size=9).reshape(3,3)
print(arr1)
print(arr2)
>>
[[[1 0 0]
[0 1 0]
[0 1 1]]
[[0 1 0]
[1 1 0]
[0 1 0]]
[[0 0 0]
[1 0 0]
[0 0 0]]]
>>
[[1 0 1]
[1 1 1]
[1 1 1]]
arr1+arr2
>>
array([[[2, 0, 1],
[1, 2, 1],
[1, 2, 2]],
[[1, 1, 1],
[2, 2, 1],
[1, 2, 1]],
[[1, 0, 1],
[2, 1, 1],
[1, 1, 1]]])
np.sum(arr1 + arr2, axis=0) # 0차원 기준으로 더하기
>>
array([[4, 1, 3],
[5, 5, 3],
[3, 5, 4]])
np.sum(arr1 + arr2, axis=-1)
>>
array([[3, 4, 5],
[3, 5, 4],
[2, 4, 3]])
np.argmax : 가장 큰 원소의 인덱스
np.argmin : 가장 작은 원소의 인덱스
np.unique : 중복 지우고 유니크한 값만 추출
'📌 Python' 카테고리의 다른 글
Python - 시각화 기초2 (0) | 2021.01.31 |
---|---|
Python - 시각화 기초 (0) | 2021.01.27 |
Python - Tensor (0) | 2021.01.27 |
Python - 정규표현식 (3) (0) | 2021.01.24 |
Python - 정규표현식 (2) (0) | 2021.01.22 |