괴발개발

인공지능2 (NumPy,ndim,shape,arange,zeros,ones,reshape, 슬라이싱, fancy indexing, np.sort, ndarray.sort, argsort) 본문

Study/인공지능

인공지능2 (NumPy,ndim,shape,arange,zeros,ones,reshape, 슬라이싱, fancy indexing, np.sort, ndarray.sort, argsort)

yousim 2021. 10. 21. 15:57

NumPy : 행렬이나 일반적으로 대규모 다차원 배열을 쉽게 처리 할 수 있도록 지원하는 파이썬의 라이브러리

 

import numpy as np  //로 사용가능

 

ndarray : Numpy의 핵심인 다차원 행렬 자료구조 클래스 

배열 a가 있다고 하자.

a.ndim : .ndim은 배열의 차원 수 or 배열의 축 수를 알 수 있다. 

a.shape : .shape은 해당 배열의 (행, 열)을 알려준다. 

 

bar = np.array(range(4)) //1차원

bbar = np.array([range(4)]) //2차원

print(bar)

print(bbar)

bar.ndim

bbar.ndim

bbar.shape

 

>>

[0 1 2 3]

[[0 1 2 3]]

1

2

(1, 4)

 

arrange : 범위내의 값을 순차적으로 가지는 배열 생성

-> seq_array = np.arange(10) // [0 1 2 3 4 5 6 7 8 9]

 

zeros : 배열값이 모두 0인 배열을 만드는 것

-> zero_array = np.zeros((3,2), dtype='int64') // 3행 2열의 모든 값이 0인 배열.

 

ones : 배열값이 모두 1인 배열을 만드는것.

-> one_array = np.ones((3,2), dtype='int64') // 3행 2열의 모든 값이 1인 배열.

 

reshape : 해당 배열을 n행m열로 바꾸겠다는 뜻. 

-> array3 = array2.reshape(2,5) // array2를 2행 5열로 바꾼것을 array3이라고 칭함. 

**

n행m열 같은 경우 n*m이 요소개수이므로 (1,10),(10,1),(5,2),(2,5)만 가능 

 

# 행의 수는 알아서 지정, 열은 5열에 맞춰서 바꾸어진다는 뜻.

array10 = arrayx.reshape(-1,5)

 

# 열의 수는 알아서 지정. 행에 맞춰서 바꾸어진다는 뜻

array11 = array7.reshape(5,-1)

 

#-1,-2번의 인덱스 원할 때는 뒤에서 인덱스 시작 (-1부터)

array = np.arange(10)

print(array[-1])

>>9

 

슬라이싱

 

슬라이싱하며 배열의 연속적인 인덱스 요소를 출력하는것을 뜻함. 

 

print(arrayI)

print(" index 3 ~ 6 =>", arrayI[3:6]) # in 'from : to', to is not included

# 여기서 to는 to-1 인덱스까지 출력.

 

>>

[0 1 2 3 4 5 6 7 8 9]

index 3 ~ 6 => [3 4 5]

 

print(arrayI[:5])

# 만약 프롬이 적혀있지않다면, 이는 맨처음을 의미함. 

>>[0 1 2 3 4]

 

print(arrayI[6:]) 

만약 to가 적혀있지 않다면 이는 마지막을 의미함.

>>[6 7 8 9]

 

Fancy Indexing

 

배열에서 특정 요소만 행, 열을 골라 요소들을 부분 출력이 가능함. 

 

arrayF = np.arange(25).reshape(5,5) 인 경우, 이는 

 

[[ 0 1 2 3 4]

[ 5 6 7 8 9]

[10 11 12 13 14]

[15 16 17 18 19]

[20 21 22 23 24]]

 

의 형태를 가진다. 

 

arrayF[[1,2,3],2]

# arrayF의 인덱스 기준 1,2,3행이며 열 인덱스는 2인 요소들 출력

>>array([ 7, 12, 17])

 

# arrayF에서 인덱스 상으로 2,3행인 부분 출력 // 뭔가 부족할땐 행이 우선이라고 생각!

arrayF[[2,3]]

>>array([[10, 11, 12, 13, 14],

            [15, 16, 17, 18, 19]])

 

# 1행 3열, 4행 4열..

arrayF[[1,4],[3,4]] //앞 인덱스는 행, 뒤 인덱스는 열 이라는 생각으로

 

# 3행 2열, 1행 1열

arrayF[[3,1],[2,1]] //앞 인덱스는 행, 뒤 인덱스는 열 이라는 생각으로

 

뒤에 n열까지 라고 적혀있는건 n-1열까지로 생각하면 되고! 어디열까지인지 안 적혀있으면 끝까지라고 생각하면 된다.

**colab 36번줄 참고!!!**

 

Boolean Indexing

: true라고 적힌 인덱스만 출력.

 

dataToSelect = [True, False, True, False, True, False, True, False, True, False]

arrayI[dataToSelect]

 

>>array([0, 2, 4, 6, 8])

 

이때 arrayI = np.arange(10) >> [0,1,2,3,4,5,6,7,8,9]

 

np.sort는 정렬이 된 새 array를 반환한다.

ndarray.sort는 원 array의 내용을 정렬을 시킨다. 반환값은 none

argsort는 정렬이 된 행렬의 인덱스를 반환한다. 

 

(1)

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

sort_array = np.sort(org_array)

print('\nsort_array ==> ', sort_array)

 

>>org => [3 1 9 5]

 

(2)

sort2_array = org_array.sort()

print('\nsort2_array ==> ', sort2_array)

 

>>sort2_array ==> None

 

(3)

# 내림차순으로 정렬을 하고자 할때는 [::-1]을 적용한다. np.sort의 경우는 np.sort(a)[::-1]

print('descending ==>', org_array[::-1])