• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

numpy에서 [:]연산

19.12.19 20:48 작성 조회수 206

0

안녕하세요.

1차원 리스트의 경우 shallow copy가 가능하여

a = [1, 2, 3]

b = a[:]

a[1] = 123123

print(b)  # [1, 2, 3]

a를 수정해도 b가 영향받지 않는데 numpy는 영향을 받더군요.

numpy에서 slicing을 통한 shallow copy를 지원하지 않는 이유가 있을까요?

이상입니다.

답변 1

답변을 작성해보세요.

0

권 철민님의 프로필

권 철민

지식공유자

19.12.20 22:29

안녕하십니까,

슬라이싱 인덱싱에 대한 좋은 정보 감사드립니다.

넘파이의 슬라이싱 인덱스 : 를 사용하면 원본 데이터를 shallow 나 deep 하지 않고 view 개념이 적용됩니다.

따라서 슬라이싱 인덱스를 이용하여 원본 ndarray를 인덱싱하여 반환된 변수는 원본 ndarray를 그대로 투영하고 있다고 생각하시면 됩니다.

a=np.array([[0, 1, 2],[3, 4, 5]])
b = a[0:1]
print('a:',a)
print('b:',b)

a[0,0] = 100
print('a:',a)
print('b:',b)

단일값 인덱스, 팬시 인덱스, 불린 인덱스는 view 개념이 아니라 copy 개념인데 슬라이싱 인덱스 : 는 view 개념입니다.

아래는 팬시 인덱스를 테스트 한 것입니다.

a = np.arange(10)
print(a)
b = a[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
print(b)
a[3] = 123123
print(b)

이러한 이유로 슬라이싱 인덱스를 사용할때는 주의가 필요합니다. 

슬라이싱 인덱스에 대한 좋은 지적 감사드립니다.