Numpy减法函数的数学表示法

时间:2019-08-20 01:12:27

标签: python numpy math

我注意到此question在此站点上已被标记为主题,因此,我在问这个问题。

我有以下代码。

norm = np.linalg.norm(true_warped_keypoints - warped_keypoints, ord=None, axis=2)
N1 = true_warped_keypoints.shape[0]
N2 = warped_keypoints.shape[0]
distance_thresh=3
if N2 != 0:
    min1 = np.min(norm, axis=1)
    count1 = np.sum(min1 <= distance_thresh)
if N1 != 0:
    min2 = np.min(norm, axis=0)
    count2 = np.sum(min2 <= distance_thresh)
if N1 + N2 > 0:
    repeatability.append((count1 + count2) / (N1 + N2))

我想用数学方式表示从here获取的这段代码。 假设true_warped_keypoints是形状为10x1x2的numpy数组,而warped_keypoints的形状为1x4x2

从数学上来说,两个矩阵的减法需要相同的维度,但是numpy像代码的第一行一样进行元素明智的减法。

我的问题如下:

  1. 如何在数学上表示第一行中的减法?
  2. 按照这种表示法,我该如何数学表示min1 = np.min(norm, axis=1)min2 = np.min(norm, axis=0)

这是一个简单的例子,可以尝试减去不同形状的数组。

A = np.array([[[1,1],[1,2],[1,3],[1,4],[1,5],[1,6]]])
B = np.array([[[1,1]],[[1,2]],[[1,3]],[[1,4]],[[1,5]]])
C=A-B

1 个答案:

答案 0 :(得分:1)

您可以将数组写为张量:

A = A_ijk,(其中1≤i≤10,j = 1,1≤k≤2)

,对于B和C相同。然后,​​您可以将C的每个元素定义为

C_ijk = A_i1k-B_1jk(对于1≤i≤10,1≤j≤4,1≤k≤2)

请注意,A_ijk = A[i-1,j-1,k-1]

为了表示范数,我们将定义第二阶张量: 定义好之后,我们现在可以逐分量定义最小向量m^1, m^2