2017-06-01 79 views
1

我想在numpy矩陣的每個(i,j)條目上應用一個函數。但是我想使用值i和j。作爲一個例子,給出矢量A和B,以及一個抽象的函數f,我要做到以下幾點:Python Numpy矩陣應用元素行列條目功能

for i in range(I): 
    for j in range(J): 
     M[i,j] = f(A[i],B[j]) 

我可以做上述類似如下:

g = lambda (i,j): f(A[i],B[j]) 
apply(M, g) 

只是想向量化for循環。謝謝!

+0

首先,你可以嘗試在你的箱子,然後嘗試,如果您遇到任何問題進行調試。 –

+0

如果你習慣了R,你可能會習慣使用'apply'函數族來對數據結構進行計算。我不知道R如何實現,但這種事情在NumPy中效率不高。 NumPy中的有效數組操作通常包括使用本機處理數組輸入的操作和函數。 – user2357112

+0

您可以隱藏函數中的操作,但這不會加速它 - 屏障是隻能獲取和生成標量值的抽象函數「f」。代碼仍然需要爲'M'中的每個元素調用一次該函數。 – hpaulj

回答

0

這取決於功能

f = lambda x, y: x ** 2 + y 

np.random.seed([3,1415]) 
A = np.random.rand(10) 
B = np.random.rand(10) 
M = np.empty_like(A) 
M.fill(np.nan) 

slc = np.array([3, 5, 6, 7]) 

然後做你提出

M[slc] = f(A[slc], B[slc]) 

M 

array([  nan,   nan,   nan, 1.14332569,   nan, 
     0.11791531, 0.86916307, 0.86854943,   nan,   nan]) 

​