我對Python還很陌生,所以如果它很愚蠢,請原諒我這個問題。我找不到通過谷歌的答案...Python:如何保持跨越賦值的可變內存位置?
我在我的代碼中使用PyFFTW,它有一個計劃階段,在那裏你通過它的兩個變量(源/目的地),你的轉換從/到。然後,當您調用FFT時,將在確切的內存空間上進行操作,這些變量位於計劃階段。因此,需要完成對變量所做的任何操作,以便這兩個變量的內存位置不會改變。 我發現運營商*=
,+=
等,這些標準的數學運算符。 但是在我的程序中,我需要對變量應用一個函數,該函數應該將它返回到相同的內存位置。 如何做到這一點?
我最初使用切片以下列方式:
a[:] = func(a)[:]
不過我才意識到,這是非常慢(我的代碼是慢約10%)。 那麼有人知道如何去做這件事嗎?
任何幫助非常感謝。提前致謝!
總之,你絕對沒有力量在Python的內存細節。即使切片分配也可以輕鬆觸發重新分配,從而移動項目。有些實現可能會阻止整個世界,只是爲了在循環過程中感受到它的整個堆。 – delnan 2011-03-10 16:52:14
嗨。我對這個想法感到非常驚訝,因爲這會讓PyFFTW的工作方式變得毫無用處,不是嗎?! – packoman 2011-03-10 18:48:58
是的,這就是爲什麼我驚訝地聽到它的原因。如果你堅持使用CPython(因爲PyFFTW是一個C庫,它仍然受限於此),並且不會調整列表的大小,所以你相當不錯。只有更多的垃圾收集器和超出已經分配的大小(大多數數據結構有一些超分配,所以你可以在重新分配之前的一些項目),這可能會導致討厭的討厭問題(從段錯誤靜默地改變未使用的內存無聲數據損壞)。 – delnan 2011-03-10 18:52:06