我有一個函數,它必須用f(x)來替換numpy數組X的每個元素x。如何修改一個numpy數組而不隱藏額外的內存分配?
def modify_inplace(X):
X = 2./(8. + numpy.exp(-X))
但是,這並不工作:
>>> X = numpy.random.random(size=(2,3))
>>> X
array([[ 0.97476386, 0.76411101, 0.37690288],
[ 0.05462798, 0.44722799, 0.23570353]])
>>>> modify_inplace(X)
>>> X
array([[ 0.97476386, 0.76411101, 0.37690288],
[ 0.05462798, 0.44722799, 0.23570353]])
我知道,我可以簡單地返回新的數組,但我不知道是否有可能修改numpy的陣列就地所以沒有額外的內存將被分配?
Ashwini Chaudhary在下面提供了一個解決方案,但這不是我正在尋找的,因爲我需要在沒有任何其他malloc的情況下修改數組。
謝謝。在你使用兩個X的第二個例子中,有什麼可以成爲避免內存分配的另一種解決方案? – psihodelia 2014-11-01 11:49:03
@psihodelia在這種情況下,我只看到循環數組,計算表達式在一個臨時變量中的答案,並替換舊的值...例如,可以在Cython中完成的例子 – 2014-11-01 23:54:52