2017-03-01 59 views
0

我有一個很長的numpy的陣列,但是我們要說它看起來像這樣:用戶定義的函數numpy的外

>>> arr1 = np.array([0.001, 0.02, 0.021]) 

我想同時訪問兩個元素的數組一路下滑,並對他們執行操作。例如,我想這樣做:

np.cos(arr1[0])*np.cos(arr1[1]) 
np.cos(arr1[0])*np.cos(arr1[2]) 
np.cos(arr1[1])*np.cos(arr1[2]) 

我熟悉的功能「外」,我可以用它來做減法:

>>> np.subtract.outer(arr1, arr1) 
array([[ 0. , -0.019, -0.02 ], 
     [ 0.019, 0. , -0.001], 
     [ 0.02 , 0.001, 0. ]]) 

我怎麼能養活我自己的函數成numpy的外面?

編輯:基於註釋的問題,我想在函數返回是這樣的:

我想同樣的模式,即由numpy的的外部函數返回。

array([[ np.cos(arr1[0])*np.cos(arr1[0]), np.cos(arr1[0])*np.cos(arr1[1]), np.cos(arr1[0])*np.cos(arr1[2]) ], 

[ np.cos(arr1[1])*np.cos(arr1[0]), np.cos(arr1[1])*np.cos(arr1[1]), np.cos(arr1[1])*np.cos(arr1[2]) ], 

[ np.cos(arr1[2])*np.cos(arr1[0]), np.cos(arr1[2])*np.cos(arr1[1]), np.cos(arr1[2])*np.cos(arr1[2]) ]]) 
+0

有沒有關於如何選擇元素對的模式? – Divakar

+0

請參閱編輯@Divakar,我無法在評論中找到我的答案! – StatsSorceress

回答

0

使用numpy的broadcasting與ufuncs如果你這樣做,你想向量化的數學運算。

arr1 = np.array([0.001, 0.02, 0.021]) 
cos_a = np.cos(arr1) 
out = cos_a * cos_a[:,None] #rows * cols 
0

你可以只使用np.multiply.outercosine計算值 -

cos_a = np.cos(arr1) 
out = np.multiply.outer(cos_a, cos_a) # Or simply np.outer()