没有for循环的阵列广播

问题描述

我有验证码

import numpy as np
import math

pos = np.array([[   1.72,2.56],[   0.24,5.67],[  -1.24,5.45],[  -3.17,-0.23],[   1.17,-1.23],[   1.12,1.08]])

ref = np.array([1.22,1.18])

# Insert your solution below
d1 = math.sqrt((pos[0,0]-ref[0])**2 + (pos[0,1]-ref[1])**2)
d2 = math.sqrt((pos[1,0]-ref[0])**2 + (pos[1,1]-ref[1])**2)
d3 = math.sqrt((pos[2,0]-ref[0])**2 + (pos[2,1]-ref[1])**2)
d4 = math.sqrt((pos[3,0]-ref[0])**2 + (pos[3,1]-ref[1])**2)
d5 = math.sqrt((pos[4,0]-ref[0])**2 + (pos[4,1]-ref[1])**2)
d6 = math.sqrt((pos[5,0]-ref[0])**2 + (pos[5,1]-ref[1])**2)

预期答案是

# [ 1.468,4.596,4.928,4.611,2.410,0.141 ]

有可能使我的解决方案更高效,更短,最好不使用for循环。 谢谢:D

解决方法

您的方程实际上是posref之间的欧式距离。您可以使用np.linalg.norm

进一步简化方程式
dist_arr = np.linalg.norm(pos-ref,axis=1)

Out[14]:
array([1.46778745,4.59570452,4.9279306,4.61087844,2.41051862,0.14142136])
,

这与您的计算相同。不需要Python的math模块。

np.sqrt(((pos - ref)**2).sum(1))

出局:

[1.46778745,0.14142136]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...