인덱싱
- 파이썬 리스트와 동일한 개념으로 사용
- 인덱싱을 하면 차원이 준다는 점을 유의!
1차원 벡터 인덱싱
x = np.arange(10)
print(x)
[0 1 2 3 4 5 6 7 8 9]
x[0]
0
x[0] = 100
print(x)
[100 1 2 3 4 5 6 7 8 9]
2차원 행렬 인덱싱
x = np.arange(10).reshape(2, 5)
print(x)
[[0 1 2 3 4]
[5 6 7 8 9]]
print(x[0])
print(x[0,0])
[0 1 2 3 4]
0
3차원 텐서 인덱싱
x = np.arange(36).reshape(3, 4, 3)
print(x)
[[[ 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 25 26]
[27 28 29]
[30 31 32]
[33 34 35]]]
print(x[0])
print(x[0, 0])
[100 1 2 3 4]
100
슬라이싱
- 리스트, 문자열 slicing과 동일한 개념으로 사용
- 슬라이싱은 차원이 바뀌지는 안는다는 점을 주의!
1차원 벡터 슬라이싱
x = np.arange(10)
x[1:5]
array([1, 2, 3, 4])
2차원 행렬 슬라이싱
x = np.arange(10).reshape(2, 5)
print(x)
[[0 1 2 3 4]
[5 6 7 8 9]]
x[:, 1:3]
array([[1, 2],
[6, 7]])
3차원 텐서 슬라이싱
x = np.arange(36).reshape(3, 4, 3)
print(x)
[[[ 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 25 26]
[27 28 29]
[30 31 32]
[33 34 35]]]
y = x[:1, :2, :]
print(y)
print(y.shape)
[[[0 1 2]
[3 4 5]]]
(1, 2, 3)
print(y.ndim)
3