說我有一個函數foo(),它接受一個浮點數並返回一個浮點數。將此函數應用於numpy矩陣或數組中的每個元素的最快/最蟒蛇方法是什麼?如何對numpy矩陣中的每個元素執行操作?
我本質上需要的是這個代碼的版本,不使用循環:
import numpy as np
big_matrix = np.matrix(np.ones((1000, 1000)))
for i in xrange(np.shape(big_matrix)[0]):
for j in xrange(np.shape(big_matrix)[1]):
big_matrix[i, j] = foo(big_matrix[i, j])
我試圖找到numpy的文檔中的東西,讓我做到這一點,但我的天堂」什麼都沒發現。
編輯:正如我在評論中所提到的,特別是我需要使用的功能是雙曲線函數,f(z) = 1/(1 + exp(-z))
。
同意矢量化是答案。您將需要重新考慮foo()所做的功能,目前它適用於單個元素。矢量化意味着一次對整個行/列進行操作,從而消除循環。 –
'np.vectorize'絕對是一般情況下最「pythonic」的。然而,對於某些函數'foo',通過完全不使用函數並依賴'numpy'向量操作,你可能會做得更好(因爲'np.vectorize'實際上沒有做任何事情來使得計算更高性能)。 – mgilson
我專門希望使用S形函數,即'F(z)的= 1 /(1 + EXP(-z))' –