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++程序員,我能理解爲什麼會這樣(它的的memcpy()代替的memmove()一遍),但它似乎像Python的最終用戶NumPy可能不會期望這一點。我沒有找到任何文件說這不起作用。NumPy的:錯誤的結果修改數組時使用本身
的問題是:是否有與NumPy的錯誤在這裏(可能不是),或者是有一些NumPy的文件,說明規則是什麼在這樣的情況下,或者是從文檔丟失?
其次,我想找出一個安全,工作液是在空間和時間準優化。也就是說,它不應該分配超出常量的內存,它不應該是一個愚蠢的純Python「for」循環。 :)這些是人們可能希望通過就地修改實現的目標,而這顯然不起作用。
我使用NumPy的1.8.0。
內部'diff'使用相同的切片區別。切片不使用任何額外的內存。唯一添加的內存用於輸出。由於輸出具有與輸入不同的大小,因此我不認爲需要位置差異(尤其是如果diff步長大於1)。 – hpaulj 2014-09-04 21:38:14
'np.subtract(bc [1:],bc [: - 1],out = bc [: - 1])'產生[1,1,1,1,1,1,1,1, 9]' - 期望的區別,除了不變的期限在最後。 – hpaulj 2014-09-04 22:00:41