개발학습일지

[Python] 넘파이 슬라이싱 할 때, 주의 해야 하는 점 본문

Python/Numpy

[Python] 넘파이 슬라이싱 할 때, 주의 해야 하는 점

처카푸 2024. 4. 7. 16:27

넘파이 어레이된 변수 X 는 그래로 두고,

변수 X에서 슬라이싱 한 정보만 따로 저장하여 바꾸고 싶은 경우

X 
# array([[  1,  70,  70,  75],
       # [100,  73,  79,  58],
       # [ 82,  30,  89,  70]])
Y = X[ : , 1: ]
Y
# array([[70, 70, 75],
       # [73, 79, 58],
       # [30, 89, 70]])
Y[ 2, 2 ]=100
Y
# array([[ 70,  70,  75],
       # [ 73,  79,  58],
       # [ 30,  89, 100]])
X
# array([[  1,  70,  70,  75],
       # [100,  73,  79,  58],
       # [ 82,  30,  89, 100]])

이렇게 하면 변수 X도 변수 Y에서 수정한 것과 같이 같이 정보가 변경된다

이유 : 메모리로 설정할 수 있어야한다 -> 원래 있던 메모리를 공유하기 때문에 메모리 낭비를 줄이기 위해서 이렇게 만들어졌다

 

원본을 건들지 않고 새로운 변수 Y를 수정하고 싶다고 하면 Copy 를 사용한다

- copy()

X
# array([[  1,  70,  70,  75],
       # [100,  73,  79,  58],
       # [ 82,  30,  89, 100]])
Y = X[:, 1: ].copy()
Y
# array([[ 70,  70,  75],
       # [ 73,  79,  58],
       # [ 30,  89, 100]])
Y[ 2, 2 ] = 0
Y
# array([[70, 70, 75],
       # [73, 79, 58],
       # [30, 89,  0]])
X
# array([[  1,  70,  70,  75],
       # [100,  73,  79,  58],
       # [ 82,  30,  89, 100]])