Numpy part II¶
Handling shape¶
reshape¶
- Array의 shape의 크기를 변경함, element의 갯수는 동일
In [1]:
import numpy as np
In [2]:
test_matrix = [[1, 2, 3, 4], [1, 2, 5, 8]]
np.array(test_matrix).shape
Out[2]:
In [3]:
np.array(test_matrix).reshape(8,)
Out[3]:
In [4]:
np.array(test_matrix).reshape(4, 2)
Out[4]:
In [5]:
np.array(test_matrix).reshape(2, 2, 2)
Out[5]:
In [6]:
print(np.array(test_matrix).reshape(2, -1))
print(np.array(test_matrix).reshape(2, -1).shape)
-1
: size를 기반으로 크기를 선정
In [7]:
test_matrix = [[[1, 2, 3, 4], [1, 2, 5, 8]], [[1, 2, 3, 4], [1, 2, 5, 8]]]
mat=np.array(test_matrix)
mat
Out[7]:
In [8]:
mat.size
Out[8]:
In [9]:
mat.flatten()
Out[9]:
indexing & slicing¶
indexing¶
- list와 달리 이차원 배열에서 [0,0] 표기법을 제공한다
- matrix일 경우 앞은 row뒤는 column을 의미한다
In [10]:
test_example = np.array([[1, 2, 3], [4.5, 5, 6]], int)
test_example
Out[10]:
In [11]:
print(test_example[0][2])
print(test_example[0,2])
In [12]:
test_example[0, 0] = 10 # Matrix 0,0 에 12 할당
test_example
Out[12]:
In [13]:
test_example = np.array([[1, 2, 5, 8], [1, 2, 5, 8], [1, 2, 5, 8], [1, 2, 5, 8]], int)
test_example
Out[13]:
In [14]:
test_example[:2,:] # 전체 col의 2행 까지
Out[14]:
In [15]:
test_example[:, 2:]
Out[15]:
In [16]:
test_example[1:3] # 1 row ~ 2row의 전체
Out[16]:
,
없이 하나의 값만 쓰게 되면 기본적으로 행(row)에 대한 처리를 한다
In [17]:
test_example = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], int)
test_example
Out[17]:
In [18]:
test_example[1,1:3] # 1row 의 1열 ~2열
Out[18]:
In [19]:
arr = np.arange(15).reshape(3, -1)
arr
Out[19]:
In [21]:
arr[:, -1]
Out[21]:
- 여기서
-1
은 마지막을 의미한다
In [22]:
arr[:,::2]
Out[22]:
In [23]:
arr[::2,::3]
Out[23]:
- slicing: [start:end:step]으로 표현해서 step도 표현 가능하다
creation function¶
arange¶
- array의 범위를 지정하여, 값의 list를 생성하는 명령어
In [24]:
# integer로 0부터 29까지 배열추출
np.arange(30)
Out[24]:
In [25]:
np.arange(0, 10, 0.5)
Out[25]:
- 여기서
step
을 소수점으로도 표현이 가능하다
In [26]:
np.arange(30).reshape(5, 6)
Out[26]:
In [27]:
# 10 - zero vector 생성
np.zeros(shape=(10,),dtype=np.int8)
Out[27]:
In [28]:
np.zeros((2, 5)) # 2 by 5 - zero matrix 생성
Out[28]:
In [29]:
np.ones(shape=(10,), dtype=np.int8)
Out[29]:
In [30]:
np.ones((3, 4))
Out[30]:
In [31]:
np.empty(shape=(10,), dtype=np.int8)
Out[31]:
In [32]:
np.empty((10, 5))
Out[32]:
- 공간만 잡아주고 값은 초기화 되어있지 않음
In [33]:
test_matrix=np.arange(30).reshape(5,6)
test_matrix
Out[33]:
In [34]:
np.ones_like(test_matrix)
Out[34]:
In [35]:
np.zeros_like(test_matrix)
Out[35]:
In [36]:
np.empty_like(test_matrix)
Out[36]:
In [37]:
np.identity(n=3, dtype=np.int8)
Out[37]:
- n → number of rows
In [38]:
np.identity(5)
Out[38]:
In [39]:
np.eye(3)
Out[39]:
In [40]:
np.eye(N=3, M=5, dtype=np.int8)
Out[40]:
In [41]:
np.eye(3, 5, k=2)
Out[41]:
diag¶
In [42]:
matrix = np.arange(9).reshape(3, 3)
matrix
Out[42]:
In [43]:
np.diag(matrix)
Out[43]:
In [44]:
np.diag(matrix,k=1)
Out[44]:
- k → start index
In [45]:
np.diag(matrix, k=-1)
Out[45]:
In [46]:
np.random.uniform(0, 1, 10).reshape(2, 5) # 균등 분포
Out[46]:
In [47]:
np.random.normal(0, 1, 10).reshape(2, 5) # 정규 분포
Out[47]:
In [48]:
np.random.exponential(scale=2,size=10)
Out[48]:
operation functions¶
In [49]:
test_array = np.arange(1, 11)
test_array
Out[49]:
In [50]:
test_array.sum()
Out[50]:
In [51]:
# 2차원 일때,
test_array = np.arange(1, 13).reshape(3, 4)
test_array
Out[51]:
In [52]:
test_array.sum(axis=1), test_array.sum(axis=0)
Out[52]:
In [53]:
# 3차원 일때,
third_order_tensor = np.array([test_array, test_array, test_array])
print(third_order_tensor.shape)
third_order_tensor
Out[53]:
In [54]:
third_order_tensor.sum(axis=2)
Out[54]:
In [55]:
third_order_tensor.sum(axis=1)
Out[55]:
In [56]:
third_order_tensor.sum(axis=0)
Out[56]:
In [57]:
test_array = np.arange(1, 13).reshape(3, 4)
test_array
Out[57]:
In [58]:
test_array.mean(),test_array.mean(axis=0)
Out[58]:
In [59]:
test_array.std(), test_array.std(axis=1)
Out[59]:
In [60]:
np.exp(test_array), np.sqrt(test_array)
Out[60]:
In [61]:
a = np.array([1, 2, 3])
b = np.array([2, 3, 4])
np.vstack((a, b))
Out[61]:
In [62]:
a = np.array([[1], [2], [3]])
b = np.array([[2], [3], [4]])
np.hstack((a, b))
Out[62]:
In [63]:
a = np.array([[1, 2, 3]])
b = np.array([[2, 3, 4]])
np.concatenate((a, b), axis=0)
Out[63]:
In [64]:
a = np.array([[1, 2, 3]])
b = np.array([[2, 3, 4]])
np.concatenate((a, b), axis=1)
Out[64]:
In [65]:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5], [6]])
np.concatenate((a, b), axis=1)
Out[65]:
In [66]:
b = np.array([5, 6])
b = b[np.newaxis, :]
b
Out[66]:
- 위 [5,6]을 2D으로 만들어 줘야하는데 이러면 축이 하나가 더 필요하다
- 이럴때
np.newaxis
를 사용해서 축을 하나 만들어 준다 b.reshap(-1,2)
와 같이해서 추가하는거와 같다
In [67]:
a = np.array([[1, 2], [3, 4]])
b = np.array([5, 6])
b = b[np.newaxis, :]
np.concatenate((a, b.T), axis=1)
Out[67]:
np.T
는 전치행렬을 만든다
In [68]:
test_a = np.array([[1, 2, 3], [4, 5, 6]], float)
In [69]:
test_a + test_a # Matrix + Matrix 연산
Out[69]:
In [70]:
test_a - test_a # Matrix - Matrix 연산
Out[70]:
In [71]:
test_a * test_a # Matrix내 element들 간 같은 위치에 있는 값들끼리 연산
Out[71]:
In [72]:
matrix_a = np.arange(1, 13).reshape(3, 4)
matrix_a * matrix_a
Out[72]:
Dot product¶
In [73]:
test_a = np.arange(1, 7).reshape(2, 3)
test_b = np.arange(7, 13).reshape(3, 2)
In [74]:
test_a.dot(test_b)
Out[74]:
In [75]:
test_a = np.arange(1, 7).reshape(2, 3)
test_a
Out[75]:
In [76]:
test_a.transpose()
Out[76]:
In [77]:
test_a.T
Out[77]:
In [78]:
test_matrix = np.array([[1, 2, 3], [4, 5, 6]], float)
scalar = 3
In [79]:
test_matrix + scalar # Matrix - Scalar 덧셈
Out[79]:
In [80]:
test_matrix - scalar # Matrix - Scalar 뺄셈
Out[80]:
In [81]:
test_matrix * 5 # Matrix - Scalar 곱셈
Out[81]:
Scalar-vector 외에도 vecto - matrix 간의 연산도 지원
In [82]:
test_matrix = np.arange(1, 13).reshape(4, 3)
test_vector = np.arange(10, 40, 10)
test_matrix,test_vector
Out[82]:
In [83]:
test_matrix + test_vector
Out[83]:
'AI > 이론' 카테고리의 다른 글
경사하강법 I (0) | 2021.01.26 |
---|---|
행렬 (0) | 2021.01.25 |
벡터 (0) | 2021.01.25 |
Numpy part III (0) | 2021.01.25 |
Numpy part I (0) | 2021.01.25 |
Python data handling (0) | 2021.01.22 |
File & Exception & Log Handling (0) | 2021.01.22 |
Module and Project (0) | 2021.01.21 |