【问题标题】:Mathematical notation of Numpy's subtract functionNumpy 减法函数的数学符号
【发布时间】: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 会像代码的第一行那样进行元素减法。

我的问题如下:

  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

【问题讨论】:

  • 我很困惑,如果您的数组具有您描述的形状,那么当您执行true_warped_keypoints - warped_keypoints 时,您应该在第一行收到错误。这些形状不能一起广播,所以减法不起作用。你确定这些是你的真实形状吗?
  • 爱因斯坦符号可能是在多个维度上表示操作的最有效方式。或适用的索引和显式总和。
  • @Blckknght 有一个小错误。我翻转了warped_keypoints 的尺寸。现在已经修好了。我还包含了一个迷你代码示例。

标签: python numpy math


【解决方案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 组件:

【讨论】:

  • 我愿意接受这个答案,但这仍然只是部分答案。请参阅我的第 2 点。
  • @Jonathan 对不起,我以某种方式忘记了那部分,现在已添加。我知道图片太大,但这是我在移动设备上能做的最好的。
猜你喜欢
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2022-11-10
相关资源
最近更新 更多