Python +머신러닝

[Python] - Numpy 기초정리 2

dev_SiWoo 2020. 8. 27. 14:24

 

 

 

 

Numpy Basic 2

zeros & ones

In [83]:
import numpy as np
 
  • zeros % ones
In [84]:
zeros = np.zeros([3,3])
zeros
Out[84]:
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])
In [85]:
ones = np.ones([10])
ones
Out[85]:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
In [86]:
ones2 = np.ones([10,5])
ones2
Out[86]:
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.]])
 
  • array 연산
In [87]:
ones2*5
Out[87]:
array([[5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.],
       [5., 5., 5., 5., 5.]])
 
  • arange (start, stop, step) : 시작값부터 end값까지 step 단위로 숫자를 생성하여 array 형태로 반환
In [88]:
arr = np.arange(5) # start의 디폴트:0, step 의 디폴트 :1
print(arr)
arr2 = np.arange(0,5,2)
print(arr2)
 
[0 1 2 3 4]
[0 2 4]
In [89]:
nums = [1,2,3,4,[1,2,3]]
type(arr)
Out[89]:
numpy.ndarray
 
  • Ravel : array의 차원을 1차원으로 바꿔줌, reshape(-1)과 동일한기능
In [90]:
r_ones = ones.ravel()
print(r_ones.shape)
r_ones
 
(10,)
Out[90]:
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
 
  • np.expand_dims()
  • array안의 값은 유지하되 차원의 수를 늘리고 싶을 때 사용
In [91]:
print('---------ones------------')
print(ones, ones.shape)
ones2 = np.expand_dims(ones, axis=0)
print(ones2, ones2.shape)

ones3 = np.expand_dims(ones, axis=1)
print(ones3, ones3.shape)
 
---------ones------------
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] (10,)
[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]] (1, 10)
[[1.]
 [1.]
 [1.]
 [1.]
 [1.]
 [1.]
 [1.]
 [1.]
 [1.]
 [1.]] (10, 1)
In [92]:
arr = np.array([[1,2,3],[1,2,3]])
print(arr, arr.shape)
print('\n------arr2------\n')
arr2 = np.expand_dims(arr, axis=0)
print(arr2, arr2.shape)

print('\n------arr3------\n')
arr3 = np.expand_dims(arr, axis=1)
print(arr3, arr3.shape)

print('\n------arr4------\n')
arr4 = np.expand_dims(arr, axis=2)
print(arr4, arr4.shape)
 
[[1 2 3]
 [1 2 3]] (2, 3)

------arr2------

[[[1 2 3]
  [1 2 3]]] (1, 2, 3)

------arr3------

[[[1 2 3]]

 [[1 2 3]]] (2, 1, 3)

------arr4------

[[[1]
  [2]
  [3]]

 [[1]
  [2]
  [3]]] (2, 3, 1)
 

numpy 배열과 python 리스트의 차이

 
  • numpy 배열과 python 리스트는 유사하게색인과 슬라이싱을 동작시킬 수 있다.
  • 다만 numpy 배열은 Broadcasting 개념이 적용되어 for문을 사용하지 않아도 되는 편리함을 얻을 수 있다.
In [93]:
#numpy배열
arr = np.arange(10)
print(arr)
print(arr[5:8])
print('---------------------------------')
#list
li = list(range(10))
print(li)
print(li[5:8])
 
[0 1 2 3 4 5 6 7 8 9]
[5 6 7]
---------------------------------
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 6, 7]
In [94]:
#broadcasting :값이 한번에 다중 할당됨
arr[5:8] = 100
print(arr)
 
[  0   1   2   3   4 100 100 100   8   9]
In [95]:
#list : 값이 한번에 다중할당 되지 않음
li[5:8] =100 # error
print(li)
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-95-9bf68e38f7b2> in <module>
      1 #list : 값이 한번에 다중할당 되지 않음
----> 2 li[5:8] =100 # error
      3 print(li)

TypeError: can only assign an iterable