我有一个非常长的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 :(得分: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