归一化:numpy 数组和一个点之间的欧几里得距离

Normalization: Euclidean distance between a numpy array and one point

我有一个 numpy 数组 (68x2),它对应于检测到的面部的 68 个不同点。

[16.0000 93.0000]
[17.0000 116.0000]
[20.0000 139.0000]
[25.0000 162.0000]
[33.0000 184.0000]
[47.0000 205.0000]
[66.0000 219.0000] ... until 68

这些点的原点在图片的左下角。我想根据新中心进行标准化。两个问题,有没有没有循环的方法?这是根据新原点进行标准化的正确方法吗?

new_origin = [112,135]
new_X
for point in X[0][0]:
    new_X.append(point-new_origin)

如果您只想平移这些点,您需要做的就是向左列(X 值)减去一个值,然后向右列(Y 值)减去另一个值:

>>> import numpy as np
>>> a = np.arange(10).reshape(5,2)
>>> a
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7],
       [8, 9]])
>>> a[:,0] = a[:,0] - 112
>>> a[:,1] = a[:,1] - 135
>>> a
array([[-112, -134],
       [-110, -132],
       [-108, -130],
       [-106, -128],
       [-104, -126]])

你可以直接用np.subtract:

>>> np.subtract(a, [112, 135])
array([[-112, -134],
       [-110, -132],
       [-108, -130],
       [-106, -128],
       [-104, -126]])

或者只是:

>>> a - [112, 135]
array([[-112, -134],
       [-110, -132],
       [-108, -130],
       [-106, -128],
       [-104, -126]])

请注意,使用 numpy,您几乎不需要手动遍历每个元素。