2017-03-01 63 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()