SiLaure's Data
[Numpy] 04. Array Indexing 본문
- Indexing (same as python list, but more powerful)
- 기본적으로는 list indexing과 동일하다.
- 그러나 list indexing에서는 제공되지 않는 (리스트 안에 수식 --연산기능)가 제공된다.
- 콜론(:) 이 slicing 기능을 한다.
- array 생성
arr1 = np.arange(10)
arr1
출력 : array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
- 첫 번째 원소
arr1[0]
출력 : 0
- 마지막 원소
arr1[-1]
출력 : 9
- 앞에서부터 원소 3개 slicing
arr1[:3]
출력 : array([0, 1, 2])
- 2차원 numpy array
arr2 = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
arr2
출력 :
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
- arr2의 2, 3 원소 = 7
arr2[1][2] # 는
arr2[1,2] # 와 같다.
- arr2의 세번째 columnm (3, 7, 11)
for row in arr2 :
print(row[2])
- arr2에 있는 모든 row에 대해서 3번째 원소를 indexing하면 결과가 numpy array로 나온다.
arr2[0, 2]
arr2[1, 2]
arr2[2, 2]
== arr2[:, 2]
출력 : array([3, 7, 11])
- arr2에 있는 두 번째 row에 대해서 모든 원소를 indexing하면 numpy array가 나온다.
arr2[1, :]
arr2[1]
출력 : array([5, 6, 7, 8])
- Masking -- 필터링
: 0과 1의 연산을 통해서 일부를 걸러낸다.
- 1과 0만을 원소로 가지는 numpy array를 생성(7개)
mask = np.array([1, 0, 0, 1, 1, 0, 0])
mask
출력 : array([1, 0, 0, 1, 1, 0, 0])
- 표준정규분포에서 random sampling을 한 원소를 가지는 7x4 행렬을 생성
data = np.random.randn(7, 4)
data
출력 :
array([[-0.26404645, -0.3611359 , 1.96175987, -0.0874347 ],
[-0.56872521, -1.13453742, -0.71474021, -0.7333052 ],
[ 0.19843513, 1.34483804, 0.2476241 , 1.7642281 ],
[ 1.2540093 , 2.45855174, 0.54001339, 0.92570961],
[-0.42096425, 0.53155381, -0.33486082, -0.85578712],
[ 0.81337903, -0.09469677, 0.13216655, -0.46730098],
[ 0.21305362, -0.76414546, -1.07716666, 0.30146443]])
- mask 만들기
masked_data = (mask == 1) # mask에서 1인 원소만 True로 출력, 나머지는 False
masked_data
mask에서 1인 원소만 True로 출력, 나머지는 False
결과는 boolean array(boolean mask)
출력 : array([ True, False, False, True, True, False, False])
- 위에서 생성한 data에 mask를 적용
data[masked_data, :]
data[masked_data]와 data[mask==1] 과 같다.
masked_data 를 대입했을 때 1인 row의 원소를 모두 가져온다
-- data[row, column]
출력 :
array([[ 0. , -0.3611359 , 1.96175987, -0.0874347 ],
[ 1.2540093 , 2.45855174, 0.54001339, 0.92570961],
[ 0. , 0.53155381, -0.33486082, -0.85578712]])
- fancy indexing을 이용해서 masking
Q. data에 2번째 column에 있는 원소가 0보다 큰 위치의 모든 row를 출력하라.
data[: , 1] > 0
출력 : array([ True, True, True, True, False, False, False])
Q2. data에 2번째 column에 있는 원소 중에 0보다 큰 원소들을 출력하라.
data[data[:, 1]>0][:, 1]
# == data[data[:, 1]>0, 1]
출력 : array([2.51125627, 0.44818361, 0.12387979, 1.64779761])
- 마스크를 0으로 바꿔본다.
data[mask==0, :]
- fancy indexing을 이용해서 masking
data[:, 0]<0
7x1의 mask == 1열의 원소 중에 0보다 작은 원소들의 위치가 True.
- fancy indexing의 또 다른 방법
data[data[:, 0]<0, 0]
== data[maked된 데이터 , 0]
--> indexing된 making을 이용해서 indexing
출력 : array([-0.26404645, -0.56872521, -0.42096425])
- 2차원 data에서 첫번째 column에 0보다 작은 원소들을 0으로 치환
data[data[:,0]<0, 0] = 0
data의 indexing의 making을 assignment
출력 :
array([[ 0. , 2.51125627, -1.72344121, -1.10685344],
[ 0.31220981, 0.44818361, 0.28256441, 0.81012228],
[ 0.57871109, 0.12387979, 1.18237909, -2.0297186 ],
[ 1.36959035, 1.64779761, 0.40812008, 1.33393502],
[ 0. , -1.43010279, 2.85851947, -0.15387284],
[ 0. , -0.02921787, 0.11758833, 0.16046368],
[ 0. , -0.15913152, 0.51348246, -0.41596259]])
'Records of > Learning' 카테고리의 다른 글
[API] 01. requests 모듈 사용하기(HTTP 통신) (0) | 2021.07.29 |
---|---|
[Web] HTTP method(GET, POST) / HTML element(태그, 속성, 값) (0) | 2021.07.29 |
[Seaborn] 07. Heatmap (0) | 2021.07.26 |
[Seaborn] 06. scatterplot & pairplot (0) | 2021.07.26 |
[Seaborn] 05. lineplot & pointplot (0) | 2021.07.26 |