【发布时间】:2019-08-20 01:12:27
【问题描述】:
我注意到这个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 会像代码的第一行那样进行元素减法。
我的问题如下:
- 如何在数学上表示第一行中的减法?
- 按照该表示,我如何在数学上表示
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
【问题讨论】:
-
我很困惑,如果您的数组具有您描述的形状,那么当您执行
true_warped_keypoints - warped_keypoints时,您应该在第一行收到错误。这些形状不能一起广播,所以减法不起作用。你确定这些是你的真实形状吗? -
爱因斯坦符号可能是在多个维度上表示操作的最有效方式。或适用的索引和显式总和。
-
@Blckknght 有一个小错误。我翻转了
warped_keypoints的尺寸。现在已经修好了。我还包含了一个迷你代码示例。