Python 矢量化以numpy为单位计算一组点的所有单位矢量

Python 矢量化以numpy为单位计算一组点的所有单位矢量,python,performance,numpy,3d,vectorization,Python,Performance,Numpy,3d,Vectorization,我需要计算两组点之间的所有单位向量 目前我有: def所有单位向量(点a、点b): 结果=np.0((len(点a)*len(点b),3),数据类型=np.32) 计数=0 对于点a中的点a: 对于点b中的pt_b: 结果[计数]=(pt_a-pt_b)/np.linalg.norm([pt_a-pt_b]) 计数+=1 返回结果 在a=np.array([[51.34,63.68,7.98]中, [53.16, 63.23, 7.19], [77.50, 62.55, 4.23], [79.5

我需要计算两组点之间的所有单位向量

目前我有:

def所有单位向量(点a、点b):
结果=np.0((len(点a)*len(点b),3),数据类型=np.32)
计数=0
对于点a中的点a:
对于点b中的pt_b:
结果[计数]=(pt_a-pt_b)/np.linalg.norm([pt_a-pt_b])
计数+=1
返回结果
在a=np.array([[51.34,63.68,7.98]中,
[53.16, 63.23, 7.19],
[77.50, 62.55, 4.23],
[79.54, 62.73, 3.61]])
在b=np.数组中([[105.58,61.09,5.50],
[107.37, 60.66, 6.50],
[130.73, 58.30, 12.33],
[132.32, 58.48, 13.38]])
结果=所有单位向量(单位a、单位b)
打印(结果)
哪些(正确)输出:

all\u unit\u vectors()
中的循环是否可以向量化?

计算为平方和的根,您可以按照以下方式实现自己的
norm
计算,然后使用以下方法向量化您的解:

给出:

[[-0.36851098  0.01759667  0.01684932]
 [-0.3777128   0.02035861  0.00997706]
 [-0.47964868  0.03250422 -0.02628129]
 [-0.4851439   0.03115273 -0.03235091]
 [-0.35515452  0.01449887  0.01145004]
 [-0.36444229  0.01727756  0.00463872]
 [-0.46762047  0.02971985 -0.03098581]
 [-0.4732132   0.02839518 -0.03700341]
 [-0.17814297  0.00926242 -0.00805704]
 [-0.18821243  0.01190899 -0.01430339]
 [-0.30440561  0.02430441 -0.04632135]
 [-0.31113513  0.0230996  -0.05193153]
 [-0.16408845  0.0103343  -0.01190965]
 [-0.1741932   0.01295652 -0.01808905]
 [-0.29113461  0.02519489 -0.04959355]
 [-0.29793917  0.02399093 -0.05515092]]

.

“我需要计算两组点之间的所有单位向量。”示例输出中的行不是单位向量。为什么你要用
np.linalg.norm([pt\u a,pt\u b])
来划分
pt\u a-pt\u b
?@WarrenWeckesser,不是吗?我是从(虽然我不清楚答案中的
v
是什么样子的)
np.linalg.norm([-0.368511,0.01759667,0.01684932])
是0.369…,而不是1。要得到单位向量,必须除以np.linalg.norm(pt_a-pt_b)。差异
pt_a-pt_b
对应于您链接到的答案中的
v
,因此您必须用
pt_a-pt_b
替换
v
,当然是@WarrenWeckesser-oh。谢谢你把它捡起来。我已经编辑了这个问题,所以没有其他人会犯同样的错误。
diff = (in_a[:, None] - in_b).reshape(-1, 3)
norm = ((in_a[:, None] ** 2 + in_b ** 2).sum(2) ** 0.5).reshape(-1, 1)

diff / norm
[[-0.36851098  0.01759667  0.01684932]
 [-0.3777128   0.02035861  0.00997706]
 [-0.47964868  0.03250422 -0.02628129]
 [-0.4851439   0.03115273 -0.03235091]
 [-0.35515452  0.01449887  0.01145004]
 [-0.36444229  0.01727756  0.00463872]
 [-0.46762047  0.02971985 -0.03098581]
 [-0.4732132   0.02839518 -0.03700341]
 [-0.17814297  0.00926242 -0.00805704]
 [-0.18821243  0.01190899 -0.01430339]
 [-0.30440561  0.02430441 -0.04632135]
 [-0.31113513  0.0230996  -0.05193153]
 [-0.16408845  0.0103343  -0.01190965]
 [-0.1741932   0.01295652 -0.01808905]
 [-0.29113461  0.02519489 -0.04959355]
 [-0.29793917  0.02399093 -0.05515092]]