如何解决没有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
解决方法
您的方程实际上是pos
和ref
之间的欧式距离。您可以使用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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。