用户定义的numpy外部函数

时间:2017-03-01 21:14:07

标签: python 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]) ]])

2 个答案:

答案 0 :(得分:0)

您可以在cosine计算值 -

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

答案 1 :(得分: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