본문 바로가기

FALL in/G.MA's 파이썬

[파이썬 Numpy] - 배열 인덱싱


배열 인덱싱(Array indexing) 


>>> import numpy as np


>>> a = np.array([[1,2,3,4,],[5,6,7,8],[9,10,11,12]])

>>> print a

[[ 1  2  3  4]

 [ 5  6  7  8]

 [ 9 10 11 12]]


>>> b = a[:2,1:4] # 0부터 2앞행까지 (0~1행), 1부터 4앞열까지 (1~3열) 잘라서 b배열에 넣는다. 

>>> print b

[[2 3 4]

 [6 7 8]]


>>> print a[0,1]

2


>>> b[0,0] = 100


>>> print a[0,1] # b의 [0,0]를 바꾸었는데 원본(a)도 같이 바뀌었다.

100

b[0,0]은 a[0,1]와 같은 데이터 조각이다. 따라서 하나를바꾸면 다른 하나도 바뀐다.



>>> import numpy as np


>>> a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

>>> print a

[[ 1  2  3  4]

 [ 5  6  7  8]

 [ 9 10 11 12]]


>>> row_r1 = a[1,:] # a의 1행으로 구성된 1차원 배열이 만들어 진다.

>>> row_r2 = a[1:2,:]# a의 1행으로 구성된 2차원 배열이 만들어 진다.


>>> print row_r1, row_r1.shape

[5 6 7 8] (4,)


>>> print row_r2, row_r2.shape

[[5 6 7 8]] (1, 4)



>>> col_r1 = a[:,1] # a의 1열로 구성된 1차원 배열이 만들어 진다.

>>> col_r2 = a[:,1:2] # a의 1열로 구성된 2차원 배열이 만들어 진다.


>>> print col_r1,col_r1.shape

[ 2  6 10] (3,)


>>> print col_r2,col_r2.shape

[[ 2]

 [ 6]

 [10]] (3, 1)

배열 인덱싱시에 콜론(:)없이 정수값을 적어주면 1차원배열이 생성된다는것을 알수있다.



>>> import numpy as np


>>> a = np.array([[1,2],[3,4],[5,6]])

>>> print a

[[1 2]

 [3 4]

 [5 6]]


>>> print a[ [0,1,2], [0,1,0] ] # a[0,0] a[1,1] a[2,0]을 성분으로 한  1차원배열(모양은 (3,))을 출력해준다.

[1 4 5]


>>> print np.array( [ a[0,0], a[1,1], a[2,0] ]) # 위의 배열 인덱싱과 같다.

[1 4 5]


>>> print a[ [0,0], [1,1] ] # a[0,1] a[0,1]을 성분으로 한 1차원배열(모양은 (2,))을 출력해준다.

[2 2]


>>> print np.array( [ a[0,1], a[0,1] ] ) # 위의 배열 인덱싱과 같다.

[2 2]



>>> import numpy as np


>>> a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])

>>> print a

[[ 1  2  3]

 [ 4  5  6]

 [ 7  8  9]

 [10 11 12]]


>>> b = np.array([0,2,0,1])


>>> print a[np.arange(4),b] # np.arange(4) -> [0,1,2,3]

[ 1  6  7 11]


>>> a[np.arange(4),b] += 10 # 각 성분에 10을 더해준다.

>>> print a

[[11  2  3]

 [ 4  5 16]

 [17  8  9]

 [10 21 12]]

>>> 

a[np.arange(4),b]는 a[[0,1,2,3],[0,2,0,1]]과 같다.

즉, [ a[0,0], a[1,2], a[2,0], a[3,1] ]과 같다. 



>>> import numpy as np


>>> a = np.array([[1,2],[3,4],[5,6]])

>>> print a

[[1 2]

 [3 4]

 [5 6]]


>>> bool_idx = (a > 2) # a의 성분중에서 2보다 큰값은 True 아니면 False로 a와 같은 shape배열로 생성된다.

>>> print bool_idx

[[False False]

 [ True  True]

 [ True  True]]


>>> print a[bool_idx]  # a의 원소 중에서 bool_idx배열의 True에 상응하는 원소를 1차원 배열로 출력한다.

[3 4 5 6]


>>> print a[a > 2]  # a의 원소 중에서  2보다 큰값을 출력한다.

[3 4 5 6]


'FALL in > G.MA's 파이썬' 카테고리의 다른 글

[파이썬 Numpy] - 배열 수학  (0) 2016.03.28
[파이썬 Numpy] - 데이터 타입  (0) 2016.03.28
[파이썬 Numpy] - 배열  (1) 2016.03.28
[파이썬 클래스]  (0) 2016.03.26
[파이썬 함수]  (0) 2016.03.26