计算角度(单位:m)

2024-04-19 21:00:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下pandas.DataFrame

       City x-Coord  City y-Coord                     coord
12860    59333.3333    18050.0000       (59333.3333+18050j)   
12941    59350.0000    18050.0000            (59350+18050j)   
13035    59366.6667    18050.0000       (59366.6667+18050j)   
12940    59350.0000    18033.3333       (59350+18033.3333j)   
13034    59366.6667    18016.6667  (59366.6667+18016.6667j)   
13033    59366.6667    18000.0000       (59366.6667+18000j)   
13132    59383.3333    18000.0000       (59383.3333+18000j)   
13133    59383.3333    18016.6667  (59383.3333+18016.6667j)   
13134    59383.3333    18033.3333  (59383.3333+18033.3333j)   
13230    59400.0000    18033.3333       (59400+18033.3333j)

现在,要计算城市1(x)、2(y)和3(z)之间的角度:

arccos(np.dot((x-y),(z-y))/(abs(x-y)*abs(z-y))

所以,我的计算方法是:

df['combined'] = list(zip(df['City x-Coord'], df['City y-Coord']))
df['combined'] = df['combined'].apply(np.array)
a = df['combined'] - df['combined'].shift(1)
b = df['combined'] - df['combined'].shift(-1)
df['angle'] = [np.degrees(np.arccos(np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y)))).round().astype(int) for
               x, y in zip(a, b)]

但是,我的角度不对。你知道吗

df.head()   

输出[5]:

       City x-Coord  City y-Coord                     coord  \
12860    59333.3333    18050.0000       (59333.3333+18050j)   
12941    59350.0000    18050.0000            (59350+18050j)   
13035    59366.6667    18050.0000       (59366.6667+18050j)   
12940    59350.0000    18033.3333       (59350+18033.3333j)   
13034    59366.6667    18016.6667  (59366.6667+18016.6667j)   
                       combined       angle  
12860     [59333.3333, 18050.0] -2147483648  
12941        [59350.0, 18050.0]         180  
13035     [59366.6667, 18050.0]          45  
12940     [59350.0, 18033.3333]          90  
13034  [59366.6667, 18016.6667]         135

另外,最后一个值也是错误的,因为NaN值。你知道吗

df.tail()   

输出[6]:

       City x-Coord  City y-Coord                     coord  \
12677    59300.0000    18100.0000            (59300+18100j)   
12761    59316.6667    18083.3333  (59316.6667+18083.3333j)   
12863    59333.3333    18100.0000       (59333.3333+18100j)   
12862    59333.3333    18083.3333  (59333.3333+18083.3333j)   
12861    59333.3333    18066.6667  (59333.3333+18066.6667j)   
                       combined       angle  
12677        [59300.0, 18100.0]         135  
12761  [59316.6667, 18083.3333]          90  
12863     [59333.3333, 18100.0]          45  
12862  [59333.3333, 18083.3333]         180  
12861  [59333.3333, 18066.6667] -2147483648  

我能理解的第一条也是最后一条,因为Nan值。我能改变听写理解来解决这个问题吗?还有,我的计算正确吗?不确定。有人能再提一个意见吗。你知道吗

谢谢你, 阿纳布


Tags: normcitydfshiftnpabszipdot