NumPy - 2(인덱싱)

BANG·2021년 3월 4일
0

numpy

목록 보기
2/2

ndarray의 데이터 선택(인덱싱)

특정 위치의 단일값 추출

  • axis를 기준으로 0부터 시작하는 위치 인덱스를 사용하여 단일값 추출
# 0에서 부터 9 까지의 1차원 ndarray 생성 
array1 = np.arange(start=0, stop=10)
print('array1:',array1)

# index는 0 부터 시작하므로 array1[2]는 3번째 index 위치의 데이터 값을 의미
value = array1[2]
print('value:',value)
print(type(value))
array1d = np.arange(start=1, stop=10)
print(array1d)
array2d = array1d.reshape(3,3)
print(array2d)

print('(row=0,col=0) index 가리키는 값:', array2d[0,0] )
print('(row=0,col=1) index 가리키는 값:', array2d[0,1] )
print('(row=1,col=0) index 가리키는 값:', array2d[1,0] )
print('(row=2,col=2) index 가리키는 값:', array2d[2,2] )

슬라이싱(Slicing)

  • : 을 이용하여 연속된 값을 선택

팬시 인덱싱(fancy indexing)

  • 리스트나 ndarray로 인덱스 집합을 지정하여 해당 위치의 인덱스에 해당하는 ndarray의 값을 반환
  • 연속되지 않고 여러개의 값을 가져올 수 있음

불린 인덱싱(Boolean indexing)

  • 조건 필터링과 검색을 동시에 진행 가능
array1d = np.arange(start=1, stop=10)
print(array1d)

print(array1d > 5)

var1 = array1d > 5
print("var1:",var1)
print(type(var1))

array2 = array1d[array1d > 5]
print('array1d > 5 불린 인덱싱 결과 값 :', array2)

boolean_indexes = np.array([False, False, False, False, False,  True,  True,  True,  True])
array3 = array1d[boolean_indexes]
print('불린 인덱스로 필터링 결과 :', array3)

indexes = np.array([5,6,7,8])
array4 = array1d[ indexes ]
print('일반 인덱스로 필터링 결과 :',array4)

정렬과 선형대수 연산

정렬(sort)

np.sort(원본행렬)

  • 원본 행렬은 그대로 유지하고 정렬된 행렬을 반환
  • 내림차순으로 정렬하려면 np.sort()[::-1]

ndarray.sort()

  • 원본 행렬 자체를 정렬하여 반환하며 반환값은 None
  • 내림차순으로 정렬하려면 ndarray.sort()[::-1]
org_array = np.array([ 3, 1, 9, 5]) 
print('원본 행렬:', org_array)

# np.sort( )로 정렬 
sort_array1 = np.sort(org_array)         
print ('np.sort( ) 호출 후 반환된 정렬 행렬:', sort_array1) 
print('np.sort( ) 호출 후 원본 행렬:', org_array)

# ndarray.sort( )로 정렬
sort_array2 = org_array.sort()
org_array.sort()
print('org_array.sort( ) 호출 후 반환된 행렬:', sort_array2)
print('org_array.sort( ) 호출 후 원본 행렬:', org_array)
org_array = np.array([ 3, 1, 9, 5])
sort_array1_desc = np.sort(org_array)[::-1]
print ('내림차순으로 정렬:', sort_array1_desc)

axis기반의 정렬

argsort()

  • 행렬 정렬 시, 원본 행렬의 인덱스(기존 행렬의 인덱스)순서가 필요할 경우 사용
  • key - value 형태의 데이터를 ndarray로 만들고 key값으로 정렬 시 사용
  • np.argsort()

org_array = np.array([ 3, 1, 9, 5]) 
print(np.sort(org_array))

sort_indices = np.argsort(org_array)
print(type(sort_indices))
print('행렬 정렬 시 원본 행렬의 인덱스:', sort_indices)

sort_indices_desc = np.argsort(org_array)[::-1]
print('행렬 내림차순 정렬 시 원본 행렬의 인덱스:', sort_indices_desc)
  • 이름과 점수의 리스트에서 점수를 정렬해서 점수에 해당하는 이름을 가져오기
name_array=np.array(['John', 'Mike', 'Sarah', 'Kate', 'Samuel'])
score_array=np.array([78, 95, 84, 98, 88])

# score_array의 정렬된 값에 해당하는 원본 행렬 위치 인덱스 반환하고 이를 이용하여 name_array에서 name값 추출.  
sort_indices = np.argsort(score_array)
print("sort indices:", sort_indices)    # sort indices: [0 2 4 1 3]

name_array_sort = name_array[sort_indices]

score_array_sort = score_array[sort_indices]
print(name_array_sort)
print(score_array_sort)

선형대수 연산(행렬 내적)

np.dot(A, B)

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

dot_product = np.dot(A, B)
print('행렬 내적 결과:\n', dot_product)

선형대수 연산(전치 행렬)

np.transpose(A)

A = np.array([[1, 2],
              [3, 4]])
transpose_mat = np.transpose(A)
print('A의 전치 행렬:\n', transpose_mat)
profile
Record Everything!!

0개의 댓글