Skip to main content
 首页 » 编程设计

python之*更新* 为两个二维数组之间的距离创建一个数组

2025年05月04日25langtianya

所以我有两个具有 x、y、z 坐标的数组。我只是想应用 3D 距离公式。问题是,我找不到一个构成每列有多个值的数组并吐出一个数组的帖子。

print MW_FirstsubPos1  
 
[[  51618.7265625   106197.7578125    69647.6484375 ] 
 [  33864.1953125    11757.29882812   11849.90332031] 
 [  12750.09863281   58954.91015625   38067.0859375 ] 
 ...,  
 [  99002.6640625    96021.0546875    18798.44726562] 
 [  27180.83984375   74350.421875     78075.78125   ] 
 [  19297.88476562   82161.140625      1204.53503418]] 
 
print MW_SecondsubPos1  
 
[[  51850.9140625   106004.0078125    69536.5234375 ] 
 [  33989.9375       11847.11425781   12255.80859375] 
 [  12526.203125     58372.3046875    37641.34765625] 
 ...,  
 [  98823.2734375    95837.1796875    18758.7734375 ] 
 [  27047.19140625   74242.859375     78166.703125  ] 
 [  19353.97851562   82375.8515625     1147.07556152]] 

是的,它们是相同的形状。

我的尝试,

import numpy as np 
 
xs1,ys1,zs1 = zip(*MW_FirstsubPos1) 
xs11,ys11,zs11 = zip(*MW_SecondsubPos1) 
 
squared_dist1 = (xs11 - xs1)**2 + (ys11 - ys1)**2 + (zs11 - zs1)**2 
dist1 = np.sqrt(squared_dist1) 
 
print dist1 

返回:

TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple' 

我只想返回一个相同形状的一维数组。

* -------------------- 更新 -------------------- *

使用 Sнаđошƒаӽ 所说的,

Distance1 = [] 
for Fir1, Sec1 in zip(MW_FirstsubVel1, MW_SecondsubPos1): 
    dist1 = 0 
    for i in range(3): 
        dist1 += (Fir1[i]-Sec1[i])**2 
    Distance1.append(dist1**0.5) 

但是在我的原始帖子中比较一个元素的距离公式时,例如,

squared_dist1 = (xs11[0] - xs1[0])**2 + (ys11[0] - ys1[0])**2 + (zs11[0] - zs1[0])**2 
dist1 = np.sqrt(squared_dist1) 
 
print dist1 

返回 322.178309762

同时

result = [] 
for a, b in zip(MW_FirstsubVel1, MW_SecondsubPos1): 
    dist = 0 
    for i in range(3): 
        dist += (a[i]-b[i])**2 
    result.append(dist**0.5) 
 
print result[0] 

返回 137163.203004

这里有什么问题吗?

请您参考如下方法:

我觉得你的解决方案不错。 一个更好的主意是使用 scipy 包中的线性代数模块,因为它可以使用多维数据进行缩放。这是我的代码。

import scipy.linalg as LA 
 
dist1 = LA.norm(MW_FirstsubPos1 - MW_SecondsubPos1, axis=1)