arange. range. 정렬(sort & argsort)
목록
1. arange란?
arange와 range를 같이 보고 이해하면 됨
[실제 상황 예시]
우리는 순차적인 값을 생성할 때가 많다. 예를 들면:
- 회원에 대한 가입번호 부여
- 100개 한정 판매 상품에 대한 고유 번호 부여
이 밖에도 데이터 관리를 위한 인덱스를 차례대로 부여하는 것은 매우 흔한 일이다.
1-1. 순서대로 리스트에 값을 생성하려면?
1~10까지 값을 생성하려면?
1
| arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
1-2. arange를 사용해서 쉽게 생성하기
np.arange(a, b): a 부터 b-1 까지 생성한다 (a포함, b미포함)
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
1-3. keyword인자를 사용해보기
np.arange(start = a, stop = b)
1
| arr = np.arange(start=1, stop=11)
|
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
1
| arr = np.arange(stop=11, start=1)
|
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
array([], dtype=int32)
1-4. 홀수의 값만 생성
1~10 사이의 값중 홀수만 생성
step 키워드 활용
np.arange(start, stop, step)
1
| arr = np.arange(1, 11, 2)
|
array([1, 3, 5, 7, 9])
1
| arr = np.arange(start=1, stop=11, step=2)
|
array([1, 3, 5, 7, 9])
2. range (Numpy와는 상관없는 Python문법)
-
range는 말 그대로 범위를 지정해 주는 것이다
-
보통 for-in 의 반복문에서 많이 사용된다
-
arange와는 다르게 array형태로 저장되어있지 않고 그냥 가볍게 바로바로 쓴다
arange 구문 활용시
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
1
2
3
4
5
6
7
8
9
10
range 구문 활용시
1 2
| for i in range(1, 11): print(i)
|
1
2
3
4
5
6
7
8
9
10
1 2
| for i in range(1, 11, 2): print(i)
|
1
3
5
7
9
3. 정렬
3-1. 1차원 정렬
1차원 정렬은 매우 간단함
- 오름차순으로 정렬: np.sort(arr)
- 내림차순으로 정렬: np.sort(arr)[::-1]
1
| arr = np.array([1, 10, 5, 8, 2, 4, 3, 6, 8, 7, 9])
|
array([ 1, 10, 5, 8, 2, 4, 3, 6, 8, 7, 9])
array([ 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10])
array([10, 9, 8, 8, 7, 6, 5, 4, 3, 2, 1])
하지만, 그냥 이상태에서는 정렬된 이 값들이 유지가 안됨
값을 sort 된 상태로 유지시키려면:
- 변수로 다시 지정해주기
- np.sort(arr) 대신 arr.sort() 쓴다 [arr자체에 sort명령을 씌워줌]
array([ 1, 10, 5, 8, 2, 4, 3, 6, 8, 7, 9])
array([ 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10])
array([ 1, 10, 5, 8, 2, 4, 3, 6, 8, 7, 9])
array([ 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10])
array([ 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10])
3-2. N차원 정렬
N차원 정렬에서는 axis 중요함. (즉, 정렬 기준이 되는 축)
1 2 3
| arr2d = np.array([[5, 6, 7, 8], [4, 3, 2, 1], [10, 9, 12, 11]])
|
(3, 4)
열 정렬 (왼쪽에서 오른쪽으로 정렬) – axis 1을 기준으로 삼
array([[ 5, 6, 7, 8],
[ 4, 3, 2, 1],
[10, 9, 12, 11]])
1
| np.sort(arr2d, axis = 1)
|
array([[ 5, 6, 7, 8],
[ 1, 2, 3, 4],
[ 9, 10, 11, 12]])
행 정렬 (위에서 아래로 정렬) – axis 0을 기준으로 삼
array([[ 5, 6, 7, 8],
[ 4, 3, 2, 1],
[10, 9, 12, 11]])
1
| np.sort(arr2d, axis = 0)
|
array([[ 4, 3, 2, 1],
[ 5, 6, 7, 8],
[10, 9, 12, 11]])
3-3. index를 반환하는 argsort
정렬한 결과에는 값을 반환하는 것이 아닌 index를 반환한다
열 정렬 (왼쪽에서 오른쪽으로 정렬)
array([[ 5, 6, 7, 8],
[ 4, 3, 2, 1],
[10, 9, 12, 11]])
1
| np.sort(arr2d, axis = 1)
|
array([[ 5, 6, 7, 8],
[ 1, 2, 3, 4],
[ 9, 10, 11, 12]])
1
| np.argsort(arr2d, axis = 1)
|
array([[0, 1, 2, 3],
[3, 2, 1, 0],
[1, 0, 3, 2]], dtype=int64)
행 정렬 (위에서 아래로 정렬)
array([[ 5, 6, 7, 8],
[ 4, 3, 2, 1],
[10, 9, 12, 11]])
1
| np.sort(arr2d, axis = 0)
|
array([[ 4, 3, 2, 1],
[ 5, 6, 7, 8],
[10, 9, 12, 11]])
1
| np.argsort(arr2d, axis = 0)
|
array([[1, 1, 1, 1],
[0, 0, 0, 0],
[2, 2, 2, 2]], dtype=int64)