簡體   English   中英

歸一化: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,您幾乎不必手動迭代每個元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM