没有for循环的数组广播
Array Broadcasting without for loop
我有密码
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
这与您的计算相同。不需要 Python 的 math
模块。
np.sqrt(((pos - ref)**2).sum(1))
输出:
[1.46778745, 4.59570452, 4.9279306 , 4.61087844, 2.41051862, 0.14142136]
你的方程实际上是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])
我有密码
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
这与您的计算相同。不需要 Python 的 math
模块。
np.sqrt(((pos - ref)**2).sum(1))
输出:
[1.46778745, 4.59570452, 4.9279306 , 4.61087844, 2.41051862, 0.14142136]
你的方程实际上是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])