当我使用shift,ENUMATE时的复制操作?还是调试?

2024-10-17 02:30:04 发布

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

我使用python计算两列中的行之间的差异。我用一个函数减去第1行到第2行,然后升到平方,然后应用平方根来消除负号。然后该函数移到第2-3行,以此类推,以分隔一行,结果保存在列中。下一步是计算行1到行3的减法,并保持该序列直到值结束。。。为了在行之间建立分隔,我构造了一个移位列表。显然我的单子没问题。我使用的数据如下:

df1
Out[44]: 
   TRACK_ID  POSITION_X  POSITION_Y  POSITION_T
0         0           1           1       35.36
1         0           2           2       35.52
2         0           3           3       35.68
3         0           4           4       35.84
4         0           1           1       35.36
5         0           4           3       34.88
6         0           2           3       34.40
7         0           6           4       33.92
8         0           4           2       33.44

这是我的输出:

rad
Out[28]: 
          0         1         2         3         4         5         6  \
0  1.414214  2.828427  4.242641  0.000000  3.605551  2.236068  2.236068   
1  1.414214  2.828427  1.414214  2.236068  1.000000  4.472136  4.472136   
2  1.414214  2.828427  1.000000  1.000000  3.162278  1.414214  1.414214   
3  4.242641  1.000000  2.236068  2.000000  2.000000       NaN       NaN   
4  3.605551  2.236068  5.830952  3.162278       NaN       NaN       NaN   
5  2.000000  2.236068  1.000000       NaN       NaN       NaN       NaN   
6  4.123106  2.236068       NaN       NaN       NaN       NaN       NaN   
7  2.828427       NaN       NaN       NaN       NaN       NaN       NaN   
8       NaN       NaN       NaN       NaN       NaN       NaN       NaN   

          7   8  
0  3.162278 NaN  
1       NaN NaN  
2       NaN NaN  
3       NaN NaN  
4       NaN NaN  
5       NaN NaN  
6       NaN NaN  
7       NaN NaN  
8       NaN NaN  

如何看到第5列和第6列是相同的,然后跳转到第7列中的正确序列

我的全部代码如下:

df1 = df[['TRACK_ID','POSITION_X','POSITION_Y','POSITION_T']].copy()



#Parameter input

N = df1.groupby('TRACK_ID').size()          
max_time = N*(0.160)
frames = max_time/N
t_step=frames.item()


data = pd.DataFrame({'N':N,'max_time':max_time,'frames':frames})

print(data)

t=np.linspace(0.160, max_time.item(), N)




def radial(df1, coords=['POSITION_X', 'POSITION_Y']):


        tau = t.copy()
        shifts = np.divide(tau,t_step).astype(float)
        print(shifts)
        radials = list()

        for i, shift in enumerate(shifts):
            diffs = np.array(df1[coords] - df1[coords].shift(-shift))
            sqdist = np.square(diffs).sum(axis=1)
            r = np.sqrt(sqdist)
            radials.append(r)


        radial_disp = pd.DataFrame({'radials':radials})
        return radials


radial_d = radial(df1, coords=['POSITION_X', 'POSITION_Y'])

radd = pd.DataFrame.from_records(radial_d) #horizontal
rad = radd.transpose() #vertical

当我打印我的班次列表时,一切看起来都很好:

shifts
[ 1.  2.  3.  4.  5.  6.  7.  8.  9.]

所以,我不明白这个问题,提前谢谢


Tags: iddataframeframestimenppositiontrackcoords
1条回答
网友
1楼 · 发布于 2024-10-17 02:30:04

好的,我想我在你的代码中找到了错误

改变一下:

for i, shift in enumerate(shifts):

收件人:

for i, shift in enumerate(np.round(shifts,0)):

应该能解决你的问题

问题是原始的shifts变量是浮动的,当您这样做时:

list(enumerate(shifts))

它输出以下内容:

Out[1923]: 
[(0, 1.0),
 (1, 2.0),
 (2, 3.0),
 (3, 4.0),
 (4, 5.0),
 (5, 6.0),
 (6, 6.9999999999999991),
 (7, 8.0),
 (8, 9.0)]

当将6.9999999991转换为int时,它将变为6而不是7

相关问题 更多 >