import numpy as np
bc = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# regular way using NumPy function
np.diff(bc) # array([1, 1, 1, 1, 1, 1, 1, 1, 1])
# something similar with array subtraction:
bc[1:] - bc[:-1] # array([1, 1, 1, 1, 1, 1, 1, 1, 1])
# but this does the wrong thing:
bc[1:] -= bc[:-1] # array([0, 1, 1, 2, 2, 3, 3, 4, 4, 5])
는 C로 자체 사용하고 이런 일이 발생하는 이유 C++ 프로그래머가 내가 이해할 수있는 배열을 수정하지만, 파이썬의 최종 사용자처럼 보인다 때 NumPy는 이것을 기대하지 않을 수도 있습니다. 그리고 이것이 작동하지 않는다고 말하는 어떤 문서도 찾지 못했습니다.NumPy와 : 잘못된 결과 (다시 한번) 대신에 memmove를 (의) 그것의 방어 적이기()를
질문은 여기에 NumPy에 버그가 있습니까 (아마도 아님)입니까, 아니면 이와 같은 상황에 어떤 규칙이 있는지 설명하는 NumPy 설명서가 있습니까? 아니면 설명서에 빠져 있습니까?
두 번째로, 나는 시공간적으로 준 최적 인 안전한 작동 솔루션을 찾고 싶다. 즉, 일정량 이상으로 메모리를 할당해서는 안되며 어리석은 순수 파이썬 "for"루프가 아니어야합니다. :) 분명히 효과가없는 적절한 수정으로 달성하기를 희망하는 목표입니다.
NumPy 1.8.0을 사용하고 있습니다.
는 내부적으로'diff'이 같은 슬라이스 차이를 사용 TNX의 EdChum
위에 당신이 정말로 원하는 것은 생각합니다. 슬라이스는 추가 메모리를 사용하지 않습니다. 유일한 추가 메모리 사용은 출력용입니다. 출력은 입력과 크기가 다르기 때문에 (특히 diff 단계가 1보다 큰 경우) 인플레 차이가 필요하지 않습니다. – hpaulj'np.subtract (bc [1 :], bc [: -1], out = bc [: -1])는 [[1,1,1,1,1,1,1,1,1,1, 9]'- 변경되지 않은 용어가 끝나는 것을 제외하고는 원하는 차이. – hpaulj