4.6.1 1차원 배열의 첨자와 슬라이싱

[그림] 방대한 데이터 블록에서 원하는 구역만 레이저로 정밀 절단하는 슬라이싱 기술
4.6.1 1차원 배열의 첨자와 슬라이싱
4.4.1 1차원 배열의 첨자와 슬라이싱
다음 코드로 1에서 9까지 제곱한 원소로 구성되는 1차원 배열 a로 구성된다.
import numpy as np
a = np.power(np.arange(10), 2)
a
출력:
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)
0부터 시작되는 정수 첨자로 배열을 참조할 수 있다. 끝부터 -1로 시작되는 음수도 가능하다.
print(a[3])
print(a[-2])
출력:
9
64
[start:stop]의 슬라이싱으로 start에서 stop-1 까지의 부분 배열이 반환된다.
print(a[1:4])
print(a[-5:-1])
출력:
[1 4 9]
[25 36 49 64]
[start:stop:step]의 슬라이싱에서 start > stop이면 오른쪽에서 왼쪽으로 step 위치의 원소로 구성된 배열이 반환된다.
print(a[8:2:-1])
print(a[-1:-7:-1])
출력:
[64 49 36 25 16 9]
[81 64 49 36 25 16]
슬라이싱 [::-1]의 결과는 역순의 배열이 반환된다.
a[::-1]
출력:
array([81, 64, 49, 36, 25, 16, 9, 4, 1, 0], dtype=int32)
a[::-2]
출력:
array([81, 49, 25, 9, 1], dtype=int32)
다음 코드로 a[2], a[3], a[4]에 모두 -100이 대입된다.
a[2:5] = -100
a
출력:
array([ 0, 1, -100, -100, -100, 25, 36, 49, 64, 81], dtype=int32)
슬라이싱의 대상이 원소가 3개이므로 이에 맞는 배열을 대입해도 가능하다.
a[2:5] = [-5, -5, -5]
a
출력:
array([ 0, 1, -5, -5, -5, 25, 36, 49, 64, 81], dtype=int32)
그러므로 다음 코드처럼 2개 원소의 배열을 대입하면 오류가 발생한다.
a[2:5] = [-5, -5]
a
오류:
ValueError: could not broadcast input array from shape (2,) into shape (3,)
다음 b는 10개의 모든 원소가 5인 배열이다.
b = np.array([5] * 10)
b
출력:
array([5, 5, 5, 5, 5, 5, 5, 5, 5, 5])
다음 코드로 첨자 0, 2, 4, 6, 8에 -10이 저장된다.
b[::2] = -10
b
출력:
array([-10, 5, -10, 5, -10, 5, -10, 5, -10, 5])
다음 코드는 첨자 0, 2, 4, 6, 8에 각각 0, 1, 2, 3, 4가 저장된다.
b[::2] = np.arange(5)
b
출력:
array([0, 5, 1, 5, 2, 5, 3, 5, 4, 5])
서브목차