numpy外层的用户定义函数

Sta*_*ess 5 python numpy

我有一个很长的 numpy 数组,但假设它看起来像这样:

>>> arr1 = np.array([0.001, 0.02, 0.021])
Run Code Online (Sandbox Code Playgroud)

我想一次访问数组中的两个元素并对它们执行操作。例如,我想这样做:

np.cos(arr1[0])*np.cos(arr1[1])
np.cos(arr1[0])*np.cos(arr1[2])
np.cos(arr1[1])*np.cos(arr1[2])
Run Code Online (Sandbox Code Playgroud)

我熟悉函数“outer”,我可以用它做减法:

>>> np.subtract.outer(arr1, arr1)
array([[ 0.   , -0.019, -0.02 ],
       [ 0.019,  0.   , -0.001],
       [ 0.02 ,  0.001,  0.   ]])
Run Code Online (Sandbox Code Playgroud)

如何将我自己的函数输入到 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]) ]])
Run Code Online (Sandbox Code Playgroud)

Aar*_*ron 0

如果您正在进行要矢量化的数学运算,请使用 numpy广播和 ufunc。

arr1 = np.array([0.001, 0.02, 0.021])
cos_a = np.cos(arr1)
out = cos_a * cos_a[:,None] #rows * cols
Run Code Online (Sandbox Code Playgroud)