NumPy 의 얕 은 복사 와 깊 은 복사
NumPy 입문 기초 지식 을 한꺼번에 해결 NumPy 의 조작 ndarray 의 모양 NumPy 의 얕 은 복사 와 깊 은 복사 NumPy 의 색인 기법
개술
NumPy 는 크기 가 큰 데이터 구 조 를 조작 하 는 경우 가 많아 조심 하지 않 으 면 메모리 와 성능 낭비 가 클 수 있 으 므 로 조작 중의 각종 행 위 를 이해 하고 실제 상황 에 따라 가장 합 리 적 인 방법 을 선택해 야 한다.
전혀 복사 안 했 어 요.
간단 한 할당 작업 만 한다 면 복사 행 위 는 일어나 지 않 을 것 이다.
>>> a = np.arange(12)
>>> b = a
>>> b is a # a b
True
>>> b.shape = 3,4
>>> a.shape
(3, 4)
이것 은 Python 언어 차원 에서 보장 하 는 것 입 니 다. 할당 작업 을 할 때 Python 이 진행 할 때 인용 하여 전달 합 니 다. 두 변 수 는 같은 메모리 영역 을 가리 키 고 있 습 니 다.
>>> def f(x):
... print(id(x))
...
>>> id(a)
148293216
>>> f(a)
148293216
보기 또는 얕 은 복사
서로 다른 ndarray 대상 은 같은 데이터 영역 을 공유 할 수 있 습 니 다.
view
방법 은 새로운 ndarray 를 만 들 수 있 습 니 다. 이 새로운 ndarray 와 원시 적 인 ndarray 는 대상 이 아 닙 니 다. (데이터 구역 을 제외 하고 다른 속성, 예 를 들 어 모양 이 다 를 수 있 음 을 의미 합 니 다)>>> c = a.view()
>>> c is a
False # c a
>>> c.base is a # c a
True
>>> c.flags.owndata
False
>>>
>>> c.shape = 2,6 # c a
>>> a.shape
(3, 4)
>>> c[0,4] = 1234 # , c a
>>> a
array([[ 0, 1, 2, 3],
[1234, 5, 6, 7],
[ 8, 9, 10, 11]])
색인 작업 은 원본 ndarray 의 view 를 되 돌려 줍 니 다.
>>> s = a[ : , 1:3]
>>> s
array([[ 1, 2],
[ 5, 6],
[ 9, 10]])
>>> s[:] = 10
>>> s
array([[10, 10],
[10, 10],
[10, 10]])
>>>
>>> a # s a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
딥 카피
copy
방법 은 완전한 새로운 ndarray 대상 을 만 들 수 있 습 니 다. 이 ndarray 대상 은 원래 의 ndarray 와 아무런 관계 가 없습니다.>>> d = a.copy() # ,
>>> d is a
False
>>> d.base is a
False
>>> d[0,0] = 9999
>>> a # d a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
전형 적 인 응용 장면 은 색인 작업 을 사용 한 후에 원시 적 인 ndarray 가 필요 하지 않 으 면 먼저 깊 은 복사 본 을 한 다음 에 원시 ndarray 를 없 애 면 메모리 소 모 를 줄 일 수 있다 는 것 이다.
>>> a = np.arange(int(1e8))
>>> b = a[:100].copy()
>>> del a # a
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.