원래 넘파이랑 판다스는 파이썬을 완전히 끝낸 다음에 포스팅 하려고 했는데 간단한 부분 - (인덱싱이랑 슬라이싱) - 은 먼저 포스팅 하도록 하겠습니다. 코딩은 iPython이 아닌 jupyter notebook에서 작성 했음을 미리 알립니다. 주피터 노트북의 경우 딱 포스트 부분에 맞게 조절하는 방법이 있는 거 같은데 왜 전 안 될 까요ㅠㅠ 아무튼 안 되면 안 되는대로, 딱히 칸을 넘어가는 부분도 없으니까 일단 포스팅 하도록 하겠습니다.
1. 1차원 배열 인덱싱
import numpy as nd
In [2]:
arr = np.arange(10)
In [3]:
arr
Out[3]:
In [4]:
arr[5]
Out[4]:
In [5]:
arr[5:8]
Out[5]:
In [6]:
arr[5:8] = 12 #색인 영역에 대입한 값이 전파된다. - 브로드캐스팅
In [7]:
arr
Out[7]:
In [8]:
arr[5:8]
Out[8]:
In [9]:
arr_slice = arr[5:8]
In [10]:
arr_slice[1]=12345
In [11]:
arr
Out[11]:
In [12]:
arr_slice
Out[12]:
이 경우 arr_slice의 처음 값이 [5], 그리고 2번째 index인 arr_slice[1]값이 전체 arr[6]이기 때문에 12345가 대입이 됩니다.
1차원 ndarray는 위에서 언급했다시피 list와 비슷하기 때문에 많이 공부 할 필요가 없지만 2차원 이후로부터 좀 공부를 해야하죠.
이제 살펴보도록 합시다.
2. 2/3차원 배열 인덱싱
arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]])
In [15]:
arr2d[1] #2차원 배열에서 단순한 색인 값은 스칼라 값이 아니라 1차원 배열이 된다.
Out[15]:
In [16]:
#개별 스칼라 요소에 접근 할 때는 [][] 처럼 콤마로 구분 된 색인 리스트로 접근 해야 한다 arr2d[1][0]
Out[16]:
In [17]:
arr3d = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) # 3차원 배열의 경우 잘 시용되지 않지만 층,행,열 로 접근 됨
In [18]:
arr3d[0] #0층
Out[18]:
In [19]:
arr3d[1] #1층
Out[19]:
In [20]:
arr3d[2] #2층 없음
In [ ]:
arr3d[0]=42
In [21]:
old_values = arr3d[0].copy()
In [22]:
arr3d[0]=42
In [23]:
arr3d
Out[23]:
In [24]:
arr3d[0]=old_values
In [25]:
arr3d
Out[25]:
In [26]:
arr3d[1,0] # -> 1층에, 0행 , 열 생략한 상태
Out[26]:
In [27]:
arr3d[1,1,1] # -> 1층, 1행, 1열
Out[27]:
#--------------------슬라이스 색인----------------------#
In [29]:
arr2d
Out[29]:
In [30]:
arr3d
Out[30]:
In [31]:
arr2d[:2] #2행까지 슬라이싱
Out[31]:
In [32]:
arr2d[:2,1:] #2행까지 슬라이싱 하고, 1열이후로 슬라이싱
Out[32]:
In [33]:
arr2d[1,:2] #arr2d[1,] 이렇게 사용하는 것을 정수 색인이라고 한다. 나중에 다르게 사용되는 것도 있으니 알아두도록 한다.
Out[33]:
In [34]:
arr2d[:,:1] #:만 사용하면 전체 축(모든 행 또는 모든 열)을 의미한다. 따라서 원래 차원의 슬라이스를 얻을 수 있다.
Out[34]:
'머신러닝 > 기초 문법' 카테고리의 다른 글
주피터 노트북 블로그에 맞기 정렬하기 (0) | 2019.02.08 |
---|---|
넘파이 기초 - 배열 생성(1) (0) | 2019.01.31 |
5. 딕셔너리 심화 - (2) (0) | 2019.01.30 |
5. 딕셔너리 기초 - (1) (0) | 2019.01.29 |
4. 리스트와 관련 메서드 (0) | 2019.01.28 |