我已经构建了一个程序,可以从一个数据帧中取出值,并将这些值用作另一个数据帧的输入。df_coordinate 是一个包含 x 和 y 坐标行的数据框(大小在 0 和 max_size_x 或 max_size_y 之间)。updated_coordinates 是一个具有屏幕大小的新数据帧,它使用坐标和一种欧几里得距离使坐标表示一个区域而不是一个像素。该代码按我的意图工作,但现在它很慢。我知道矢量化要快得多,我尽可能多地实现它。但是,我似乎找不到如何使用使用列和行索引的公式进行矢量化的方法。如您所见,使用 .apply 我使用 x.name 和 x.index,但是有没有办法更快地实现它?
max_size_x = 1080
max_size_y = 720
for index, row in df_coordinate.iterrows():
updated_coordinates = pd.DataFrame(np.zeros((max_size_x, max_size_y))) # to do: maybe empty instead of zeroes, and already delete the ones from attention_max
current_time = df_coordinate.loc[index]
coordinate_x = current_time['x_coordinate']
coordinate_y = current_time['y_coordinate']
# calculate area with Euclidean distance:
updated_coordinates = updated_coordinates.apply(lambda x: 1/ ( np.power((np.sqrt(np.power(x.name-coordinate_x,2) + np.power(x.index-coordinate_y,2))),2)))
我找到了答案,通过在循环之外添加这个:
df_x = pd.DataFrame(np.zeros((image_size_x, image_size_y)))
df_x = df_x.apply(lambda x: x.name)
df_y = pd.DataFrame(np.zeros((image_size_x, image_size_y)))
df_y = df_y.apply(lambda x: x.index)
并用向量替换 .apply 函数:
updated_coordinates = 1/ ( * np.power((np.sqrt(np.power(df_x - gaze_x,2) + np.power(df_y - gaze_y,2))),2))
我已经检查过,这运行速度是其十倍以上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句